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

网友投稿 239 2022-08-29


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());

}

}

执行结果

对比分析

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

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

总结

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


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Numpy 矩阵的属性(numpy怎么安装)
下一篇:python 字典,元组,对象,数组取值方法(python是什么意思)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~