温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Java开闭原则实例分析

发布时间:2022-02-11 09:17:07 来源:亿速云 阅读:163 作者:iii 栏目:开发技术

这篇文章主要介绍“Java开闭原则实例分析”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Java开闭原则实例分析”文章能帮助大家解决问题。

定义

开闭原则( Open Close Principle ),又称为OCP原则,即一个软件实体如类,模块和函数应该对扩展开放,对修改关闭。其中,对扩展开放是针对提供方来说的,对修改关闭是针对调用方来说的。

案例

需求

购买东西的时候,根据支付类型的不同使用不同的方式进行支付,当类型为1时,使用微信支付;当类型为2时,使用支付宝支付

方案一

定义支付类型

/**
 * 支付类型
 * @author:liyajie
 * @createTime:2022/2/7 10:21
 * @version:1.0
 */
public class PayType {
    int type;
}

定义微信支付类

/**
 * 微信支付类
 * @author:liyajie
 * @createTime:2022/2/7 10:46
 * @version:1.0
 */
public class WxPay extends PayType{
    WxPay(){
        super.type = 1;
    }
}

定义支付宝支付类

/**
 * 支付宝支付类
 * @author:liyajie
 * @createTime:2022/2/7 10:46
 * @version:1.0
 */
public class ZfbPay extends PayType{
    ZfbPay(){
        super.type = 2;
    }
}

定义支付操作类

/**
 * @desc:
 * @author:liyajie
 * @createTime:2022/2/7 10:41
 * @version:1.0
 */
public class Pay {
    public void pay(PayType s) {
        if (s.type == 1) {
            wxPay(s);
        } else if (s.type == 2) {
            zfbPay(s);
        }
    }

    // 微信支付
    public void wxPay(PayType r) {
        System.out.println(" 正在微信支付中---支付成功 ");
    }

    // 支付宝支付
    public void zfbPay(PayType r) {
        System.out.println(" 正在支付宝支付中---支付成功");
    }

}

定义测试类

/**
 * 测试类1
 * @author:liyajie
 * @createTime:2022/2/7 10:48
 * @version:1.0
 */
public class Test1 {
    public static void main(String[] args) {
        new Pay().pay(new WxPay());
        new Pay().pay(new ZfbPay());
    }
}

执行结果

Java开闭原则实例分析

方案二

定义支付类型基类

/**
 * 支付类型基类
 * @author:liyajie
 * @createTime:2022/2/7 10:21
 * @version:1.0
 */
public abstract class PayTypeNew {

    int type;

    public abstract void pay();
}

定义微信支付类

/**
 * 微信支付类
 * @author:liyajie
 * @createTime:2022/2/7 10:46
 * @version:1.0
 */
public class WxPayNew extends PayTypeNew{
    WxPayNew(){
        super.type = 1;
    }

    @Override
    public void pay() {
        System.out.println(" 正在微信支付中---支付成功 ");
    }
}

定义支付宝支付类

/**
 * 支付宝支付类
 * @author:liyajie
 * @createTime:2022/2/7 10:46
 * @version:1.0
 */
public class ZfbPayNew extends PayTypeNew{
    ZfbPayNew(){
        super.type = 2;
    }

    @Override
    public void pay() {
        System.out.println(" 正在支付宝支付中---支付成功");
    }
}

定义支付操作类

/**
 * 支付操作类
 * @author:liyajie
 * @createTime:2022/2/7 10:41
 * @version:1.0
 */
public class PayNew {
    public void pay(PayTypeNew payTypeNew) {
        payTypeNew.pay();
    }
}

定义测试类

/**
 * 测试类2
 * @author:liyajie
 * @createTime:2022/2/7 10:48
 * @version:1.0
 */
public class Test2 {
    public static void main(String[] args) {
       new PayNew().pay(new WxPayNew());
       new PayNew().pay(new ZfbPayNew());
    }
}

执行结果

Java开闭原则实例分析

对比分析

方案一,未遵守开闭原则,耦合较高,如果需求需要扩展,比如再增加一个信用卡支付,那么需要改的地方较大,风险较高

方案二,遵守开闭原则,耦合低,扩展方便,并且也提高了代码的复用性,维护起来也很方便

关于“Java开闭原则实例分析”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注亿速云行业资讯频道,小编每天都会为大家更新不同的知识点。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI