Java設(shè)計模式七大原則之開閉原則詳解
定義
開閉原則( Open Close Principle ),又稱為OCP原則,即一個軟件實體如類,模塊和函數(shù)應(yīng)該對擴展開放,對修改關(guān)閉。其中,對擴展開放是針對提供方來說的,對修改關(guān)閉是針對調(diào)用方來說的。
案例
需求
購買東西的時候,根據(jù)支付類型的不同使用不同的方式進行支付,當類型為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());
}
}執(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();
}
}定義測試類
/**
* 測試類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é)果

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

