最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2022年02月10日 16:36:09   作者:溫故知新之java  
開(kāi)閉原則,又稱為OCP原則,即一個(gè)軟件實(shí)體如類,模塊和函數(shù)應(yīng)該對(duì)擴(kuò)展開(kāi)放,對(duì)修改關(guān)閉。本文將詳細(xì)介紹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)示例

    這篇文章主要介紹了Spring Cloud下基于OAUTH2認(rèn)證授權(quán)的實(shí)現(xiàn)示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-03-03
  • 簡(jiǎn)單了解Spring中的事務(wù)控制

    簡(jiǎn)單了解Spring中的事務(wù)控制

    這篇文章主要介紹了簡(jiǎn)單了解Spring中的事務(wù)控制,事務(wù)是一組操作的執(zhí)行單元,下面我們來(lái)簡(jiǎn)單學(xué)習(xí)一下吧
    2019-05-05
  • Mybatis重置Criteria的正確姿勢(shì)分享

    Mybatis重置Criteria的正確姿勢(shì)分享

    這篇文章主要介紹了Mybatis重置Criteria的正確姿勢(shì),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • 如何使用Docker部署Java項(xiàng)目

    如何使用Docker部署Java項(xiàng)目

    在接觸了docker后,干什么都想用docker來(lái)弄,這篇文章主要給大家介紹了關(guān)于如何使用Docker部署Java項(xiàng)目的相關(guān)資料,文中通過(guò)圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2023-07-07
  • 基于Java SSM的健康管理小程序的實(shí)現(xiàn)

    基于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ū)別

    這篇文章主要介紹了 java 中 System.out.println()和System.out.write()的區(qū)別.的相關(guān)資料,需要的朋友可以參考下
    2017-04-04
  • springboot整合redis之消息隊(duì)列

    springboot整合redis之消息隊(duì)列

    本文主要介紹了springboot整合redis之消息隊(duì)列,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • JAVA ArrayList詳細(xì)介紹(示例)

    JAVA ArrayList詳細(xì)介紹(示例)

    本文對(duì)JAVA ArrayList做了詳細(xì)介紹,文中學(xué)到了ArrayList源碼解析、ArrayList遍歷方式、toArray()異常,最后給出了ArrayList示例。
    2013-11-11
  • Mybatis報(bào)錯(cuò)mapkey is required問(wèn)題及解決

    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)日志功能詳解

    Spring動(dòng)態(tài)代理實(shí)現(xiàn)日志功能詳解

    這篇文章主要為大家詳細(xì)介紹了Spring動(dòng)態(tài)代理實(shí)現(xiàn)日志功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-08-08

最新評(píng)論

广南县| 芦溪县| 宜城市| 中西区| 育儿| 容城县| 呼图壁县| 奈曼旗| 衡南县| 连云港市| 河曲县| 金乡县| 长春市| 社旗县| 岚皋县| 鲜城| 苗栗县| 神农架林区| 陕西省| 尼勒克县| 永善县| 闵行区| 牟定县| 镇赉县| 开平市| 五大连池市| 正镶白旗| 吴忠市| 星座| 德惠市| 同仁县| 峨边| 余庆县| 武义县| 淮北市| 阿巴嘎旗| 沂源县| 西平县| 周至县| 墨脱县| 墨玉县|