亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Java設(shè)計(jì)模式七大原則之開閉原則詳解

 更新時間:2022年02月10日 16:36:09   作者:溫故知新之java  
開閉原則,又稱為OCP原則,即一個軟件實(shí)體如類,模塊和函數(shù)應(yīng)該對擴(kuò)展開放,對修改關(guān)閉。本文將詳細(xì)介紹Java設(shè)計(jì)模式七大原則之一的開閉原則,需要的可以參考一下

定義

開閉原則( Open Close Principle ),又稱為OCP原則,即一個軟件實(shí)體如類,模塊和函數(shù)應(yīng)該對擴(kuò)展開放,對修改關(guān)閉。其中,對擴(kuò)展開放是針對提供方來說的,對修改關(guān)閉是針對調(diào)用方來說的。

案例

需求

購買東西的時候,根據(jù)支付類型的不同使用不同的方式進(jìn)行支付,當(dāng)類型為1時,使用微信支付;當(dāng)類型為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é)果

對比分析

方案一,未遵守開閉原則,耦合較高,如果需求需要擴(kuò)展,比如再增加一個信用卡支付,那么需要改的地方較大,風(fēng)險(xiǎn)較高

方案二,遵守開閉原則,耦合低,擴(kuò)展方便,并且也提高了代碼的復(fù)用性,維護(hù)起來也很方便

總結(jié)

開閉原則是最基礎(chǔ)最重要的設(shè)計(jì)原則,開閉原則可以提高復(fù)用性和可維護(hù)性

到此這篇關(guān)于Java設(shè)計(jì)模式七大原則之開閉原則詳解的文章就介紹到這了,更多相關(guān)Java開閉原則內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java中時間API的基本使用教程

    Java中時間API的基本使用教程

    這篇文章主要介紹了Java中時間API的基本使用教程,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用Java具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • Java中Spock框架Mock對象的方法經(jīng)驗(yàn)總結(jié)

    Java中Spock框架Mock對象的方法經(jīng)驗(yàn)總結(jié)

    這篇文章主要分享了Spock框架Mock對象的方法經(jīng)驗(yàn)總結(jié),下文分享一些常用項(xiàng)目實(shí)戰(zhàn)說明以及代碼,供大家項(xiàng)目中參考,也具有一的的參考價值,需要的小伙伴可以參考一下
    2022-02-02
  • 基礎(chǔ)不牢,地動山搖,Java基礎(chǔ)速來刷刷

    基礎(chǔ)不牢,地動山搖,Java基礎(chǔ)速來刷刷

    基礎(chǔ)不牢,地動山搖,快來一起學(xué)習(xí)一下基礎(chǔ)吧,不斷地學(xué)習(xí)就算是基礎(chǔ)也會有新的認(rèn)知和收獲,加油
    2021-08-08
  • 使用Spring自定義注解實(shí)現(xiàn)任務(wù)路由的方法

    使用Spring自定義注解實(shí)現(xiàn)任務(wù)路由的方法

    本篇文章主要介紹了使用Spring自定義注解實(shí)現(xiàn)任務(wù)路由的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • Spring Boot CLI安裝教程

    Spring Boot CLI安裝教程

    Spring Boot是一個命令行工具,用于使用Spring進(jìn)行快速原型搭建。本文重點(diǎn)給大家介紹Spring Boot CLI安裝教程,感興趣的朋友參考下吧
    2017-08-08
  • 2020新版idea創(chuàng)建項(xiàng)目沒有javaEE 沒有Web選項(xiàng)的完美解決方法

    2020新版idea創(chuàng)建項(xiàng)目沒有javaEE 沒有Web選項(xiàng)的完美解決方法

    這篇文章主要介紹了2020新版idea創(chuàng)建項(xiàng)目沒有javaEE 沒有Web選項(xiàng)的完美解決方法,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-09-09
  • 深入理解Java中的volatile關(guān)鍵字(總結(jié)篇)

    深入理解Java中的volatile關(guān)鍵字(總結(jié)篇)

    volatile這個關(guān)鍵字,不僅僅在Java語言中有,在很多語言中都有的,而且其用法和語義也都是不盡相同的。這篇文章主要介紹了Java中的volatile關(guān)鍵字,需要的朋友可以參考下
    2018-10-10
  • java中Ajax與Axios的使用小結(jié)

    java中Ajax與Axios的使用小結(jié)

    在項(xiàng)目中我們經(jīng)常會遇到需要向請求頭中添加消息的場景,本文主要介紹了java中Ajax與Axios的使用小結(jié),文中通過示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-02-02
  • 一文帶你吃透JSP增刪改查實(shí)戰(zhàn)案例詳細(xì)解讀

    一文帶你吃透JSP增刪改查實(shí)戰(zhàn)案例詳細(xì)解讀

    這篇文章主要為大家詳細(xì)介紹了JSP中增刪改查實(shí)戰(zhàn)案例的相關(guān)知識,文中的示例代碼講解現(xiàn)象,具有一定的借鑒價值,感興趣的小伙伴可以了解一下
    2023-03-03
  • Java實(shí)現(xiàn)短信驗(yàn)證碼詳細(xì)過程

    Java實(shí)現(xiàn)短信驗(yàn)證碼詳細(xì)過程

    這篇文章主要給大家介紹了關(guān)于Java實(shí)現(xiàn)短信驗(yàn)證碼的相關(guān)資料, 在業(yè)務(wù)需求中我們經(jīng)常會用到短信驗(yàn)證碼,比如手機(jī)號登錄、綁定手機(jī)號、忘記密碼、敏感操作等,需要的朋友可以參考下
    2023-09-09

最新評論