Java設(shè)計(jì)模式七大原則之開(kāi)閉原則詳解
定義
開(kāi)閉原則( Open Close Principle ),又稱為OCP原則,即一個(gè)軟件實(shí)體如類,模塊和函數(shù)應(yīng)該對(duì)擴(kuò)展開(kāi)放,對(duì)修改關(guān)閉。其中,對(duì)擴(kuò)展開(kāi)放是針對(duì)提供方來(lái)說(shuō)的,對(duì)修改關(guān)閉是針對(duì)調(diào)用方來(lái)說(shuō)的。
案例
需求
購(gòu)買東西的時(shí)候,根據(jù)支付類型的不同使用不同的方式進(jìn)行支付,當(dāng)類型為1時(shí),使用微信支付;當(dāng)類型為2時(shí),使用支付寶支付
方案一
定義支付類型
/**
* 支付類型
* @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(" 正在支付寶支付中---支付成功");
}
}定義測(cè)試類
/**
* 測(cè)試類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());
}
}執(zhí)行結(jié)果

方案二
定義支付類型基類
/**
* 支付類型基類
* @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();
}
}定義測(cè)試類
/**
* 測(cè)試類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());
}
}執(zhí)行結(jié)果

對(duì)比分析
方案一,未遵守開(kāi)閉原則,耦合較高,如果需求需要擴(kuò)展,比如再增加一個(gè)信用卡支付,那么需要改的地方較大,風(fēng)險(xiǎn)較高
方案二,遵守開(kāi)閉原則,耦合低,擴(kuò)展方便,并且也提高了代碼的復(fù)用性,維護(hù)起來(lái)也很方便
總結(jié)
開(kāi)閉原則是最基礎(chǔ)最重要的設(shè)計(jì)原則,開(kāi)閉原則可以提高復(fù)用性和可維護(hù)性
到此這篇關(guān)于Java設(shè)計(jì)模式七大原則之開(kāi)閉原則詳解的文章就介紹到這了,更多相關(guān)Java開(kāi)閉原則內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Spring Cloud下基于OAUTH2認(rèn)證授權(quán)的實(shí)現(xiàn)示例
這篇文章主要介紹了Spring Cloud下基于OAUTH2認(rèn)證授權(quán)的實(shí)現(xiàn)示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-03-03
基于Java SSM的健康管理小程序的實(shí)現(xiàn)
本篇文章主要為大家分享了基于SSM健康管理小程序的設(shè)計(jì)與實(shí)現(xiàn)。感興趣的小伙伴可以了解一下2021-11-11
java 中 System.out.println()和System.out.write()的區(qū)別
這篇文章主要介紹了 java 中 System.out.println()和System.out.write()的區(qū)別.的相關(guān)資料,需要的朋友可以參考下2017-04-04
Mybatis報(bào)錯(cuò)mapkey is required問(wèn)題及解決
這篇文章主要介紹了Mybatis報(bào)錯(cuò)mapkey is required問(wèn)題及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-06-06
Spring動(dòng)態(tài)代理實(shí)現(xiàn)日志功能詳解
這篇文章主要為大家詳細(xì)介紹了Spring動(dòng)態(tài)代理實(shí)現(xiàn)日志功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-08-08

