Java設計模式七大原則之開閉原則詳解
定義
開閉原則( Open Close Principle ),又稱為OCP原則,即一個軟件實體如類,模塊和函數(shù)應該對擴展開放,對修改關閉。其中,對擴展開放是針對提供方來說的,對修改關閉是針對調用方來說的。
案例
需求
購買東西的時候,根據(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í)行結果

方案二
定義支付類型基類
/**
* 支付類型基類
* @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í)行結果

對比分析
方案一,未遵守開閉原則,耦合較高,如果需求需要擴展,比如再增加一個信用卡支付,那么需要改的地方較大,風險較高
方案二,遵守開閉原則,耦合低,擴展方便,并且也提高了代碼的復用性,維護起來也很方便
總結
開閉原則是最基礎最重要的設計原則,開閉原則可以提高復用性和可維護性
到此這篇關于Java設計模式七大原則之開閉原則詳解的文章就介紹到這了,更多相關Java開閉原則內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Java中Spock框架Mock對象的方法經(jīng)驗總結
這篇文章主要分享了Spock框架Mock對象的方法經(jīng)驗總結,下文分享一些常用項目實戰(zhàn)說明以及代碼,供大家項目中參考,也具有一的的參考價值,需要的小伙伴可以參考一下2022-02-02
2020新版idea創(chuàng)建項目沒有javaEE 沒有Web選項的完美解決方法
這篇文章主要介紹了2020新版idea創(chuàng)建項目沒有javaEE 沒有Web選項的完美解決方法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-09-09

