国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

軟件設(shè)計(jì)模式原則(二)開(kāi)閉原則

這篇具有很好參考價(jià)值的文章主要介紹了軟件設(shè)計(jì)模式原則(二)開(kāi)閉原則。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

繼續(xù)講解第二個(gè)重要的設(shè)計(jì)模式原則——開(kāi)閉原則~

軟件設(shè)計(jì)模式原則(二)開(kāi)閉原則,軟件工程理論知識(shí),考研,軟件工程,設(shè)計(jì)模式

一.定義

????????開(kāi)閉原則,在面向?qū)ο缶幊填I(lǐng)域中,規(guī)定“軟件中的對(duì)象(類,模塊,函數(shù)等等)應(yīng)該對(duì)于擴(kuò)展是開(kāi)放的,但是對(duì)于修改是封閉的”,這意味著一個(gè)實(shí)體是允許在不改變它的源代碼的前提下變更它的行為。

歸納總結(jié)如下:

  • 開(kāi)閉原則(Open Closed Principle)是編程中最基礎(chǔ)、最重要的設(shè)計(jì)原則。
  • 一個(gè)軟件實(shí)體如類,模塊和函數(shù)應(yīng)該對(duì)擴(kuò)展開(kāi)放(對(duì)提供方),對(duì)修改關(guān)閉(對(duì)使用方)。用抽象構(gòu)建框架,用實(shí)現(xiàn)擴(kuò)展細(xì)節(jié)。
  • 當(dāng)軟件需要變化時(shí),盡量通過(guò)擴(kuò)展軟件實(shí)體的行為來(lái)實(shí)現(xiàn)變化,而不是通過(guò)修改已有的代碼來(lái)實(shí)現(xiàn)變化。
  • 編程中遵循其它原則,以及使用設(shè)計(jì)模式的目的就是遵循開(kāi)閉原則。
  • 所謂對(duì)擴(kuò)展開(kāi)放:指的是我們系統(tǒng)中的模塊、類、方法對(duì)它們的提供者(開(kāi)發(fā)者)應(yīng)該是開(kāi)放的,提供者可以對(duì)系統(tǒng)進(jìn)行擴(kuò)展(新增)新的功能。
  • 所謂對(duì)修改關(guān)閉:指的是系統(tǒng)中的模塊、類、方法對(duì)它們的使用者(調(diào)用者)應(yīng)該是關(guān)閉的,使用者使用這些功能時(shí),不會(huì)因?yàn)樘峁┓叫略隽斯δ芏鴮?dǎo)致使用者也進(jìn)行相應(yīng)修改。

二.描述

開(kāi)閉原則是面向?qū)ο蟪绦蛟O(shè)計(jì)的終極目標(biāo),它使軟件實(shí)體擁有一定的適應(yīng)性和靈活性的同時(shí)具備穩(wěn)定性和延續(xù)性~

  • 對(duì)軟件測(cè)試的影響
  • 可以提高代碼的可復(fù)用性
  • 可以提高軟件的可維護(hù)性

三.案例

舉個(gè)簡(jiǎn)單的例子,假設(shè)你的女票(使用方)有一天收到了你送給她的禮物——這禮物有可能是情書(shū),也有可能是手工書(shū)~則實(shí)現(xiàn)的代碼如下:

//禮物類基類
class gift{
    String type;
}
class Letter extends gift{
    Letter(){
        super.type="Letter";
    }
}

class Handwork extends gift{
    Handwork(){
        super.type="Handwork";
    }
}

//使用方類,也就是接收方類
class girlfriend{
    public void drawShape(gift g) {
        if (g.type == "Letter")
            getLetter(g);
        else if (g.type == "Handwork")
            getHandwork(g);
    }

    public void getLetter(gift r) {
        System.out.println("收到的禮物是情書(shū)!");
    }
    
    public void getHandwork(gift r) {
        System.out.println("收到的禮物是手工書(shū)!");
    }
}

public class Main {
    public static void main(String[] args) {
        girlfriend hyh = new girlfriend();
        hyh.drawShape(new Letter());
        hyh.drawShape(new Handwork());

    }
}

?這時(shí)加入禮物種類添加了一種類型——奢侈品,則對(duì)代碼的修改如下:

//禮物類基類
class gift{
    String type;
}
class Letter extends gift{
    Letter(){
        super.type="Letter";
    }
}

class Handwork extends gift{
    Handwork(){
        super.type="Handwork";
    }
}
class luxury extends gift{
    luxury(){
        super.type="luxury";
    }
}

//使用方類,也就是接收方類
class girlfriend{
    public void getgift(gift g) {
        if (g.type == "Letter")
            getLetter(g);
        else if (g.type == "Handwork")
            getHandwork(g);
        else if (g.type == "Luxury")
            getLuxury(g);

    }

    public void getLetter(gift r) {
        System.out.println("收到的禮物是情書(shū)!");
    }

    public void getHandwork(gift r) {
        System.out.println("收到的禮物是手工書(shū)!");
    }
    public void getLuxury(gift r) {
        System.out.println("收到的禮物是奢侈品!");
    }
}

public class Main {
    public static void main(String[] args) {
        girlfriend hyh = new girlfriend();
        hyh.getgift(new Letter());
        hyh.getgift(new Handwork());
        hyh.getgift(new luxury());
    }
}

此時(shí)不難發(fā)現(xiàn),不僅修改了提供方(gift類)的代碼,也修改了使用方(girlfriend類)的代碼,即違反了所謂的開(kāi)閉原則~(對(duì)修改關(guān)閉)

?軟件設(shè)計(jì)模式原則(二)開(kāi)閉原則,軟件工程理論知識(shí),考研,軟件工程,設(shè)計(jì)模式

?????????也就是說(shuō),當(dāng)發(fā)生變更時(shí),提供方是允許修改的,而使用方則不允許,這就是所謂的【對(duì)擴(kuò)展開(kāi)放,對(duì)修改關(guān)閉】。

做出如下修改,即可避免:



/**
 *
 */
//gift類,基類
abstract class gift {
    //聲明為一個(gè)抽象類~
    String type;
    public abstract void get();//抽象方法
}

class Letter extends gift {
    Letter() {
        super.type ="Letter";
    }
    //重點(diǎn)在于不同的類內(nèi)部具體實(shí)現(xiàn)所謂的方法——即重寫(xiě)
    @Override
    public void get() {
        System.out.println("收到的禮物是情書(shū)~");
    }
}

class Handwork extends gift {
    Handwork() {
        super.type =" Handwork";
    }
    //重點(diǎn)在于不同的類內(nèi)部具體實(shí)現(xiàn)所謂的方法——即重寫(xiě)
    @Override
    public void get() {
        System.out.println("收到的禮物是手工書(shū)~");
    }
}

class girlfriend {
    
    public void getgift(gift g) {
        g.get();
    }
}

public class Main {
    public static void main(String[] args) {
        girlfriend hyh = new girlfriend();
        hyh.getgift(new Letter());
        hyh.getgift(new Handwork());
        
    }
}

此時(shí)我們想要再添加奢侈品Luxury類,只需要修改提供方即可,不需要修改使用方的代碼:



/**
 *
 */
//gift類,基類
abstract class gift {
    //聲明為一個(gè)抽象類~
    String type;
    public abstract void get();//抽象方法
}

class Letter extends gift {
    Letter() {
        super.type ="Letter";
    }
    //重點(diǎn)在于不同的類內(nèi)部具體實(shí)現(xiàn)所謂的方法——即重寫(xiě)
    @Override
    public void get() {
        System.out.println("收到的禮物是情書(shū)~");
    }
}

class Handwork extends gift {
    Handwork() {
        super.type =" Handwork";
    }
    //重點(diǎn)在于不同的類內(nèi)部具體實(shí)現(xiàn)所謂的方法——即重寫(xiě)
    @Override
    public void get() {
        System.out.println("收到的禮物是手工書(shū)~");
    }
}
class Luxury extends gift {
    Luxury() {
        super.type ="Luxury";
    }
    //重點(diǎn)在于不同的類內(nèi)部具體實(shí)現(xiàn)所謂的方法——即重寫(xiě)
    @Override
    public void get() {
        System.out.println("收到的禮物是奢侈品~");
    }
}

class girlfriend {

    public void getgift(gift g) {
        g.get();
    }
}

public class Main {
    public static void main(String[] args) {
        girlfriend hyh = new girlfriend();
        hyh.getgift(new Letter());
        hyh.getgift(new Handwork());
        hyh.getgift(new Luxury());
    }
}

?做個(gè)總結(jié)——牢記對(duì)擴(kuò)展開(kāi)放,對(duì)修改關(guān)閉~

軟件設(shè)計(jì)模式原則(二)開(kāi)閉原則,軟件工程理論知識(shí),考研,軟件工程,設(shè)計(jì)模式

(某種意義上,也可以作為【多態(tài)】的示例~)

在20世紀(jì)90年代,開(kāi)閉原則被廣泛的重新定義由于抽象化接口的使用,在這中間實(shí)現(xiàn)可以被改變,多種實(shí)現(xiàn)可以被創(chuàng)建,并且多態(tài)化的替換不同的實(shí)現(xiàn)。

相比梅耶的使用方式,多態(tài)開(kāi)閉原則的定義倡導(dǎo)對(duì)抽象基類的繼承。接口規(guī)約可以通過(guò)繼承來(lái)重用,但是實(shí)現(xiàn)不必重用。已存在的接口對(duì)于修改是封閉的,并且新的實(shí)現(xiàn)必須,至少,實(shí)現(xiàn)那個(gè)接口。

?文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-742496.html

到了這里,關(guān)于軟件設(shè)計(jì)模式原則(二)開(kāi)閉原則的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 軟件工程(十二) 設(shè)計(jì)模式之創(chuàng)建型模式

    我們傳統(tǒng)的23種設(shè)置模式如下 創(chuàng)建型模式:用于創(chuàng)建對(duì)象 工廠方法(Factory Method) 模式 抽象工廠(Abstract Factory) 模式 原型(Protptype) 模式 單例(Singleton) 模式 構(gòu)建器模式 結(jié)構(gòu)型模式:建立更大的結(jié)構(gòu) 適配器(Adapter)模式 橋接(Bridge)模式 組合(Composite)模式 裝飾(Decorator)模

    2024年02月11日
    瀏覽(24)
  • 軟件工程(十三) 設(shè)計(jì)模式之結(jié)構(gòu)型設(shè)計(jì)模式(一)

    軟件工程(十三) 設(shè)計(jì)模式之結(jié)構(gòu)型設(shè)計(jì)模式(一)

    前面我們記錄了創(chuàng)建型設(shè)計(jì)模式,知道了通過(guò)各種模式去創(chuàng)建和管理我們的對(duì)象。但是除了對(duì)象的創(chuàng)建,我們還有一些結(jié)構(gòu)型的模式。 簡(jiǎn)要說(shuō)明 將一個(gè)類的接口轉(zhuǎn)換為用戶希望得到的另一個(gè)接口。它使原本不相同的接口得以協(xié)同工作。 速記 轉(zhuǎn)換接口 類圖如下 角色說(shuō)

    2024年02月11日
    瀏覽(31)
  • 【軟件工程_設(shè)計(jì)模式】——為什么要使用設(shè)計(jì)模式?

    什么是設(shè)計(jì)模式? 為什么要使用設(shè)計(jì)模式? 使用設(shè)計(jì)模式的原因如下: 提高 代碼的可 讀性和可維護(hù)性 :設(shè)計(jì)模式是前人根據(jù)經(jīng)驗(yàn)總結(jié)出來(lái)的,使用設(shè)計(jì)模式,就相當(dāng)于是站在了前人的肩膀上。熟悉設(shè)計(jì)模式的人應(yīng)該能夠很容易讀懂運(yùn)用設(shè)計(jì)模式編寫(xiě)的程序。 提高代碼的 可

    2024年02月07日
    瀏覽(38)
  • 【設(shè)計(jì)模式之美】SOLID 原則之二:開(kāi)閉原則方法論、開(kāi)閉原則如何取舍

    具體的說(shuō),添加一個(gè)新的功能應(yīng)該是,在已有代碼基礎(chǔ)上擴(kuò)展代碼(新增模塊、類、方法等),而非修改已有代碼(修改模塊、類、方法等)。 舉例說(shuō)明: 現(xiàn)在,如果我們需要添加一個(gè)功能,當(dāng)每秒鐘接口超時(shí)請(qǐng)求個(gè)數(shù),超過(guò)某個(gè)預(yù)先設(shè)置的最大閾值時(shí),我們也要觸發(fā)告警

    2024年01月25日
    瀏覽(32)
  • C#設(shè)計(jì)模式之--六大原則 開(kāi)閉原則

    設(shè)計(jì)模式六大原則是單一職責(zé)原則、里氏替換原則、依賴倒置原則、接口隔離原則、迪米特法則、開(kāi)閉原則。它們不是要我們刻板的遵守,而是根據(jù)實(shí)際需要靈活運(yùn)用。只要對(duì)它們的遵守程度在一個(gè)合理的范圍內(nèi),努為做到一個(gè)良好的設(shè)計(jì)。本文主要介紹一下.NET(C#) 開(kāi)閉原則

    2024年02月10日
    瀏覽(26)
  • 【23種設(shè)計(jì)模式】開(kāi)閉原則

    個(gè)人主頁(yè) :金鱗踏雨 個(gè)人簡(jiǎn)介 :大家好,我是 金鱗 ,一個(gè)初出茅廬的Java小白 目前狀況 :22屆普通本科畢業(yè)生,幾經(jīng)波折了,現(xiàn)在任職于一家國(guó)內(nèi)大型知名日化公司,從事Java開(kāi)發(fā)工作 我的博客 :這里是CSDN,是我學(xué)習(xí)技術(shù),總結(jié)知識(shí)的地方。希望和各位大佬交流,共同進(jìn)

    2024年02月08日
    瀏覽(29)
  • 軟件工程(十四) 設(shè)計(jì)模式之結(jié)構(gòu)型模式(二)

    軟件工程(十四) 設(shè)計(jì)模式之結(jié)構(gòu)型模式(二)

    簡(jiǎn)要說(shuō)明 將對(duì)象組合成樹(shù)形結(jié)構(gòu)以表示“整體-部分”的層次結(jié)構(gòu),使得用戶對(duì)單個(gè)對(duì)象和組合對(duì)象的使用具有一致性。 速記 樹(shù)形目錄結(jié)構(gòu) 類圖如下 由類圖其實(shí)可以看出,組合模式就是將具有父子關(guān)系的結(jié)構(gòu),組裝形成一棵樹(shù),并且根據(jù)規(guī)范,樹(shù)干節(jié)點(diǎn)和葉子節(jié)點(diǎn)均

    2024年02月11日
    瀏覽(29)
  • 軟件工程(十五) 行為型設(shè)計(jì)模式(一)

    軟件工程(十五) 行為型設(shè)計(jì)模式(一)

    簡(jiǎn)要說(shuō)明 通過(guò)多個(gè)對(duì)象處理的請(qǐng)求,減少請(qǐng)求的發(fā)送者與接收者之間的耦合。將接受對(duì)象 鏈接 起來(lái),在鏈中傳遞請(qǐng)求,直到有一個(gè)對(duì)象處理這個(gè)請(qǐng)求。 速記 傳遞職責(zé) 類圖如下 由類圖可以比較容易的看出來(lái),其實(shí)就是自己關(guān)聯(lián)自己,形成了一個(gè)鏈,并且自己有不同的

    2024年02月11日
    瀏覽(36)
  • 軟件工程(十七) 行為型設(shè)計(jì)模式(三)

    軟件工程(十七) 行為型設(shè)計(jì)模式(三)

    簡(jiǎn)要說(shuō)明 定義對(duì)象間的一種一對(duì)多的依賴關(guān)系,當(dāng)一個(gè)對(duì)象的狀態(tài)發(fā)生改變時(shí),所有依賴于它的對(duì)象都得到通知并自動(dòng)更新 速記 聯(lián)動(dòng),廣播消息 類圖如下 基于上面的類圖,我們來(lái)實(shí)現(xiàn)一個(gè)監(jiān)聽(tīng)器。類圖中的Subject對(duì)應(yīng)我們的被觀察對(duì)象接口(IObservable),Observer對(duì)應(yīng)我們

    2024年02月11日
    瀏覽(19)
  • 軟件工程(十八) 行為型設(shè)計(jì)模式(四)

    軟件工程(十八) 行為型設(shè)計(jì)模式(四)

    簡(jiǎn)要說(shuō)明 允許一個(gè)對(duì)象在其內(nèi)部改變時(shí)改變它的行為 速記 狀態(tài)變成類 類圖如下 狀態(tài)模式主要用來(lái)解決對(duì)象在多種狀態(tài)轉(zhuǎn)換時(shí),需要對(duì)外輸出不同的行為的問(wèn)題。比如訂單從待付款到待收貨的咋黃臺(tái)發(fā)生變化,執(zhí)行的邏輯是不一樣的。 所以我們將狀態(tài)抽象為一個(gè)接口

    2024年02月11日
    瀏覽(20)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包