欢迎来到代码驿站!

JAVA代码

当前位置:首页 > 软件编程 > JAVA代码

Java设计模式七大原则之开闭原则详解

时间:2022-10-19 10:49:56|栏目: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());
    }
}

执行结果

方案二

定义支付类型基类

/**
 * 支付类型基类
 * @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());
    }
}

执行结果

对比分析

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

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

总结

开闭原则是最基础最重要的设计原则,开闭原则可以提高复用性和可维护性

上一篇:使用MybatisPlus自定义模版中能获取到的信息

栏    目:JAVA代码

下一篇:java中CopyOnWriteArrayList源码解析

本文标题:Java设计模式七大原则之开闭原则详解

本文地址:http://www.codeinn.net/misctech/216754.html

推荐教程

广告投放 | 联系我们 | 版权申明

重要申明:本站所有的文章、图片、评论等,均由网友发表或上传并维护或收集自网络,属个人行为,与本站立场无关。

如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

联系QQ:914707363 | 邮箱:codeinn#126.com(#换成@)

Copyright © 2020 代码驿站 版权所有