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());
}
}执行结果

对比分析
方案一,未遵守开闭原则,耦合较高,如果需求需要扩展,比如再增加一个信用卡支付,那么需要改的地方较大,风险较高
方案二,遵守开闭原则,耦合低,扩展方便,并且也提高了代码的复用性,维护起来也很方便
总结
开闭原则是最基础最重要的设计原则,开闭原则可以提高复用性和可维护性
到此这篇关于Java设计模式七大原则之开闭原则详解的文章就介绍到这了,更多相关Java开闭原则内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
Spring Cloud下基于OAUTH2认证授权的实现示例
这篇文章主要介绍了Spring Cloud下基于OAUTH2认证授权的实现示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧2018-03-03
java 中 System.out.println()和System.out.write()的区别
这篇文章主要介绍了 java 中 System.out.println()和System.out.write()的区别.的相关资料,需要的朋友可以参考下2017-04-04
Mybatis报错mapkey is required问题及解决
这篇文章主要介绍了Mybatis报错mapkey is required问题及解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教2024-06-06


最新评论