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開閉原則內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!