小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

面向?qū)ο蟮钠叻N設(shè)計(jì)原則

 Baruch 2017-08-04

下面的截圖:主要講述了七種設(shè)計(jì)原則定名稱(chēng),定義以及使用的頻率。

原則一:(SRP:Single responsibility principle)單一職責(zé)原則又稱(chēng)單一功能原則

 

核心:解耦和增強(qiáng)內(nèi)聚性(高內(nèi)聚,低耦合)

 

描述:

 

類(lèi)被修改的幾率很大,因此應(yīng)該專(zhuān)注于單一的功能。如果你把多個(gè)功能放在同一個(gè)類(lèi)中,功能之間就形成了關(guān)聯(lián),

 

改變其中一個(gè)功能,有可能中止另一個(gè)功能,這時(shí)就需要新一輪的測(cè)試來(lái)避免可能出現(xiàn)的問(wèn)題。

 

原則二:開(kāi)閉原則(OCP:Open Closed Principle)

 

核心思想:對(duì)擴(kuò)展開(kāi)放,對(duì)修改關(guān)閉。即在設(shè)計(jì)一個(gè)模塊的時(shí)候,應(yīng)當(dāng)使這個(gè)模

 

塊可以在不被修改的前提下被擴(kuò)展。

 

根據(jù)開(kāi)閉原則,在設(shè)計(jì)一個(gè)軟件系統(tǒng)模塊(類(lèi),方法)的時(shí)候,應(yīng)該可以在不修改原有的模塊(修改關(guān)閉)的基礎(chǔ)上,能擴(kuò)展其功能(擴(kuò)展開(kāi)放)。

 

擴(kuò)展開(kāi)放:

 

某模塊的功能是可擴(kuò)展的,則該模塊是擴(kuò)展開(kāi)放的。軟件系統(tǒng)的功能上的可擴(kuò)展性要求模塊是擴(kuò)展開(kāi)放的。

 

修改關(guān)閉:

 

某模塊被其他模塊調(diào)用,如果該模塊的源代碼不允許修改,則該模塊修改關(guān)閉的。軟件系統(tǒng)的功能上的穩(wěn)定性,持續(xù)性要求是修改關(guān)的。

 

原則三:里氏替換原則(LSP:Liskov Substitution Principle)

 

核心:

 

1.在任何父類(lèi)出現(xiàn)的地方都可以用他的子類(lèi)來(lái)替代(子類(lèi)應(yīng)當(dāng)可以替換父類(lèi)并出現(xiàn)在父類(lèi)能夠出現(xiàn)的任何地方)

 

子類(lèi)必須完全實(shí)現(xiàn)父類(lèi)的方法。在類(lèi)中調(diào)用其他類(lèi)是務(wù)必要使用父類(lèi)或接

 

口,如果不能使用父類(lèi)或接口,則說(shuō)明類(lèi)的設(shè)計(jì)已經(jīng)違背了LSP原則。

 

2.子類(lèi)可以有自己的個(gè)性。子類(lèi)當(dāng)然可以有自己的行為和外觀了,也就是方

 

法和屬性

 

3.覆蓋或?qū)崿F(xiàn)父類(lèi)的方法時(shí)輸入?yún)?shù)可以被放大。即子類(lèi)可以重載父類(lèi)的方法,但輸入?yún)?shù)應(yīng)比父類(lèi)方法中的大,這樣在子類(lèi)代替父類(lèi)的時(shí)候,調(diào)用的仍然是父類(lèi)的方法。即以子類(lèi)中方法的前置條件必須與超類(lèi)中被覆蓋的方法的前置條件相同或者更寬松。

 

4.覆蓋或?qū)崿F(xiàn)父類(lèi)的方法時(shí)輸出結(jié)果可以被縮小。

 

原則四:依賴倒轉(zhuǎn)原則(DIP:Dependence Inversion Principle)

 

別名:依賴倒置原則或依賴反轉(zhuǎn)原則

 

核心:要依賴于抽象,不要依賴于具體的實(shí)現(xiàn)

 

1.高層模塊不應(yīng)該依賴低層模塊,兩者都應(yīng)該依賴其抽象(抽象類(lèi)或接口)

 

2.抽象不應(yīng)該依賴細(xì)節(jié)(具體實(shí)現(xiàn))

 

3.細(xì)節(jié)(具體實(shí)現(xiàn))應(yīng)該依賴抽象。

 

三種實(shí)現(xiàn)方式:

 

1.通過(guò)構(gòu)造函數(shù)傳遞依賴對(duì)象

 

 

 

2.通過(guò)setter方法傳遞依賴對(duì)象

 

 

 

3.接口聲明實(shí)現(xiàn)依賴對(duì)象

 

原則五:接口分離原則(ISP:Interface Segregation Principle)

 

核心思想:

 

不應(yīng)該強(qiáng)迫客戶程序依賴他們不需要使用的方法。

 

接口分離原則的意思就是:一個(gè)接口不需要提供太多的行為,一個(gè)接口應(yīng)該只提供一種對(duì)外的功能,不應(yīng)該把所有的操作都封裝到一個(gè)接口當(dāng)中.

 

分離接口的兩種實(shí)現(xiàn)方法:

 

1.使用委托分離接口。(Separation through Delegation)

 

2.使用多重繼承分離接口。(Separation through Multiple Inheritance)

 

原則六:合成復(fù)用原則(CRP:Composite Reuse Principle)

 

核心思想:

 

盡量使用對(duì)象組合,而不是繼承來(lái)達(dá)到復(fù)用的目的。該原則就是在一個(gè)新的對(duì)象里面使用一些已有的對(duì)象,

 

使之成為新對(duì)象的一部分:新的對(duì)象通過(guò)向這些對(duì)象的委派達(dá)到復(fù)用已有功能的目的。

 

復(fù)用的種類(lèi):

 

1.繼承

 

2.合成聚合

 

注:在復(fù)用時(shí)應(yīng)優(yōu)先考慮使用合成聚合而不是繼承

 

原則七:迪米特原則(LOD:Law of Demeter)

 

又叫最少知識(shí)原則

 

核心思想:

 

一個(gè)對(duì)象應(yīng)當(dāng)對(duì)其他對(duì)象有盡可能少的了解,不和陌生人說(shuō)話。

 

(類(lèi)間解耦,低耦合)意思就是降低各個(gè)對(duì)象之間的耦合,提高系統(tǒng)的可維護(hù)性;在模塊之間只通過(guò)接口來(lái)通信,

 

而不理會(huì)模塊的內(nèi)部工作原理,可以使各個(gè)模塊的耦合成都降到最低,促進(jìn)軟件的復(fù)用

 

注:

 

1.在類(lèi)的劃分上,應(yīng)該創(chuàng)建有弱耦合的類(lèi);

 

2.在類(lèi)的結(jié)構(gòu)設(shè)計(jì)上,每一個(gè)類(lèi)都應(yīng)當(dāng)盡量降低成員的訪問(wèn)權(quán)限;

 

3.在類(lèi)的設(shè)計(jì)上,只要有可能,一個(gè)類(lèi)應(yīng)當(dāng)設(shè)計(jì)成不變;

 

4.在對(duì)其他類(lèi)的引用上,一個(gè)對(duì)象對(duì)其它對(duì)象的引用應(yīng)當(dāng)降到最低;

 

5.盡量降低類(lèi)的訪問(wèn)權(quán)限;

 

6.謹(jǐn)慎使用序列化功能;

 

7.不要暴露類(lèi)成員,而應(yīng)該提供相應(yīng)的訪問(wèn)器(屬性)     

 

 

 

UML統(tǒng)一建模語(yǔ)言,java中七種設(shè)計(jì)原則

UML統(tǒng)一建模語(yǔ)言。 

類(lèi)與類(lèi),類(lèi)和接口,接口和接口之間的關(guān)系。 

1、實(shí)現(xiàn)關(guān)系(一個(gè)類(lèi)實(shí)現(xiàn)一個(gè)接口) 

2、泛化關(guān)系(一個(gè)類(lèi)繼承另一個(gè)類(lèi)) 

3、關(guān)聯(lián)(1)、依賴關(guān)系:一個(gè)類(lèi)是另一個(gè)類(lèi)的方法局部變量,方法的參數(shù)或方法返回值。2)、聚合關(guān)系:一個(gè)類(lèi)是另一個(gè)類(lèi)的屬性,是整體和部分的關(guān)系。3)、組合關(guān)系:一個(gè)類(lèi)是另一個(gè)類(lèi)的屬性,是整體不可分割的一部分,是強(qiáng)聚合。) 

 

4、單一職責(zé):一個(gè)類(lèi)而言,應(yīng)該僅有一個(gè)引起它變化的原因,永遠(yuǎn)不要讓一個(gè)類(lèi)存在多個(gè)改變的理。一個(gè)類(lèi)只應(yīng)該做和一個(gè)任務(wù)相關(guān)的業(yè)務(wù),不應(yīng)該把過(guò)多的業(yè)務(wù)放在一個(gè)類(lèi)中完成。 

 

迪米特法則: 

 

一個(gè)軟件實(shí)體應(yīng)當(dāng)盡可能少的與其他實(shí)體發(fā)生相互作用。

 

 

七種設(shè)計(jì)原則總結(jié)

 

單一職責(zé)原則:一個(gè)類(lèi)只應(yīng)該做和一個(gè)職責(zé)相關(guān)的事情,不要把過(guò)多的業(yè)務(wù)放在一個(gè)類(lèi)中完成。 

 

迪米特法則:軟件實(shí)體之間應(yīng)該做到最少的交互。不要和陌生人說(shuō)話。調(diào)用方只關(guān)心他需要使用的方法 

 

接口隔離原則:使用專(zhuān)門(mén)的接口,比用統(tǒng)一的接口要好。便于分工,在實(shí)現(xiàn)接口時(shí),不應(yīng)該看到自己不用關(guān)心的方法。 

 

開(kāi)閉原則:軟件實(shí)體應(yīng)該對(duì)擴(kuò)展開(kāi)放,對(duì)修改關(guān)閉。開(kāi)閉原則是設(shè)計(jì)原則的核心原則,其他的設(shè)計(jì)原則都是開(kāi)閉原則表現(xiàn)和補(bǔ)充。實(shí)現(xiàn)開(kāi)閉原則的方法就是抽象。 

 

聚合/組合復(fù)用原則。多使用聚合/組合達(dá)到代碼的重用,少使用繼承復(fù)用。 

 

依賴倒置原則:面向抽象編程,不要面向具體編程。 

 

 

 

 

面向?qū)ο笃叽笤O(shè)計(jì)原則

 

1、  開(kāi)閉原則

 

2、  里氏替換原則

 

3、  單一職責(zé)原則

 

4、  接口隔離原則

 

5、  依賴倒置原則

 

6、  迪米特原則

 

7、組合/聚合復(fù)用原則

 

 

 

知識(shí)點(diǎn)關(guān)聯(lián)

 

學(xué)習(xí)面向?qū)ο蟮脑O(shè)計(jì)模式,是深入面向?qū)ο笏枷氲蔫€匙,通過(guò)大師級(jí)的微妙案例,我們可以開(kāi)闊自己的認(rèn)知。

 

在學(xué)習(xí)面向?qū)ο笤O(shè)計(jì)七大原則之前,我們要對(duì)基本的封裝、繼承、多態(tài)思想有足夠的了解,對(duì)抽象類(lèi)和接口也要有足夠的編碼能力,因?yàn)樵O(shè)計(jì)模式是以上知識(shí)點(diǎn)的綜合應(yīng)用。

 

另外,在接觸具體的設(shè)計(jì)模式之前,面向?qū)ο蟮钠叽笤O(shè)計(jì)原則會(huì)讓你知道,設(shè)計(jì)模式出現(xiàn)的必然性和意義所在。

 

 

 

1、 每一種設(shè)計(jì)思想的精準(zhǔn)含義,具體如下:

 

先從整體認(rèn)識(shí)這七種設(shè)計(jì)思想。

 

一、開(kāi)閉原則:

 

這一條放在第一位來(lái)理解,它的含義是對(duì)擴(kuò)展開(kāi)放,對(duì)修改關(guān)閉。解釋一下就是,我們寫(xiě)完的代碼,不能因?yàn)樾枨笞兓托薷?。我們可以通過(guò)新增代碼的方式來(lái)解決變化的需求。

 

當(dāng)然,這是一種理想的狀態(tài),在現(xiàn)實(shí)中,我們要盡量的縮小這種修改。

 

再解釋一下這條原則的意義所在,我們采用逆向思維方式來(lái)想。如果每次需求變動(dòng)都去修改原有的代碼,那原有的代碼就存在被修改錯(cuò)誤的風(fēng)險(xiǎn),當(dāng)然這其中存在有意和無(wú)意的修改,都會(huì)導(dǎo)致原有正常運(yùn)行的功能失效的風(fēng)險(xiǎn),這樣很有可能會(huì)展開(kāi)可怕的蝴蝶效應(yīng),使維護(hù)工作劇增。

 

說(shuō)到底,開(kāi)閉原則除了表面上的可擴(kuò)展性強(qiáng)以外,在企業(yè)中更看重的是維護(hù)成本。

 

所以,開(kāi)閉原則是設(shè)計(jì)模式的第一大原則,它的潛臺(tái)詞是:控制需求變動(dòng)風(fēng)險(xiǎn),縮小維護(hù)成本。

 

以下幾種原則,都是為此原則服務(wù)的。

 

二、里氏替換選擇:

 

此原則的含義是子類(lèi)可以在任何地方替換它的父類(lèi)。解釋一下,這是多態(tài)的前提,我們后面很多所謂的靈活,都是不改變聲明類(lèi)型的情況下,改變實(shí)例化類(lèi)來(lái)完成的需求變更。當(dāng)然,繼承的特性看似天然就滿足這個(gè)條件。但這里更注重的是繼承的應(yīng)用問(wèn)題,我們必須保證我們的子類(lèi)和父類(lèi)劃分是精準(zhǔn)的。

 

里氏替換原則的潛臺(tái)詞是:盡量使用精準(zhǔn)的抽象類(lèi)或者接口。

 

三、單一職責(zé)原則:

 

單一職責(zé)的含義是:類(lèi)的職責(zé)單一,引起類(lèi)變化的原因單一。解釋一下,這也是靈活的前提,如果我們把類(lèi)拆分成最小的職能單位,那組合與復(fù)用就簡(jiǎn)單的多了,如果一個(gè)類(lèi)做的事情太多,在組合的時(shí)候,必然會(huì)產(chǎn)生不必要的方法出現(xiàn),這實(shí)際上是一種污染。

 

舉個(gè)例子,我們?cè)诶L制圖案的時(shí)候,用“點(diǎn)”組成圖和用“直線”組成圖,哪個(gè)更靈活呢?一定是“點(diǎn)”,它可以繪制任何圖形,而直線只能繪制帶有直線條的圖案,它起碼無(wú)法畫(huà)圓。

 

單一職責(zé)的潛臺(tái)詞是:拆分到最小單位,解決復(fù)用和組合問(wèn)題。

 

四、接口隔離原則:

 

接口隔離原則可以說(shuō)是單一職責(zé)的必要手段,它的含義是盡量使用職能單一的接口,而不使用職能復(fù)雜、全面的接口。很好理解,接口是為了讓子類(lèi)實(shí)現(xiàn)的,如果子類(lèi)想達(dá)到職能單一,那么接口也必須滿足職能單一。

 

相反,如果接口融合了多個(gè)不相關(guān)的方法,那它的子類(lèi)就被迫要實(shí)現(xiàn)所有方法,盡管有些方法是根本用不到的。這就是接口污染。

 

接口隔離原則的潛臺(tái)詞是:拆分,從接口開(kāi)始。

 

五、依賴倒置原則:

 

想要理解依賴倒置原則,必須先理解傳統(tǒng)的解決方案。面相對(duì)象的初期的程序,被調(diào)用者依賴于調(diào)用者。也就是調(diào)用者決定被調(diào)用者有什么方法,有什么樣的實(shí)現(xiàn)方式,這種結(jié)構(gòu)在需求變更的時(shí)候,會(huì)付出很大的代價(jià),甚至推翻重寫(xiě)。

 

依賴倒置原則就是要求調(diào)用者和被調(diào)用者都依賴抽象,這樣兩者沒(méi)有直接的關(guān)聯(lián)和接觸,在變動(dòng)的時(shí)候,一方的變動(dòng)不會(huì)影響另一方的變動(dòng)。

 

其實(shí),依賴倒置和前面的原則是相輔相成的,都強(qiáng)調(diào)了抽象的重要性。

 

依賴倒置的潛臺(tái)詞是:面向抽象編程,解耦調(diào)用和被調(diào)用者。

 

六、迪米特原則:

 

迪米特原則要求盡量的封裝,盡量的獨(dú)立,盡量的使用低級(jí)別的訪問(wèn)修飾符。這是封裝特性的典型體現(xiàn)。

 

一個(gè)類(lèi)如果暴露太多私用的方法和字段,會(huì)讓調(diào)用者很茫然。并且會(huì)給類(lèi)造成不必要的判斷代碼。所以,我們使用盡量低的訪問(wèn)修飾符,讓外界不知道我們的內(nèi)部。這也是面向?qū)ο蟮幕舅悸?。這是迪米特原則的一個(gè)特性,無(wú)法了解類(lèi)更多的私有信息。

 

另外,迪米特原則要求類(lèi)之間的直接聯(lián)系盡量的少,兩個(gè)類(lèi)的訪問(wèn),通過(guò)第三個(gè)中介類(lèi)來(lái)實(shí)現(xiàn)。

 

迪米特原則的潛臺(tái)詞是:不和陌生人說(shuō)話,有事去中介。

 

七、組合/聚合復(fù)用原則:

 

此原則的含義是,如果只是達(dá)到代碼復(fù)用的目的,盡量使用組合與聚合,而不是繼承。這里需要解釋一下,組合聚合只是引用其他的類(lèi)的方法,而不會(huì)受引用的類(lèi)的繼承而改變血統(tǒng)。

 

繼承的耦合性更大,比如一個(gè)父類(lèi)后來(lái)添加實(shí)現(xiàn)一個(gè)接口或者去掉一個(gè)接口,那子類(lèi)可能會(huì)遭到毀滅性的編譯錯(cuò)誤,但如果只是組合聚合,只是引用類(lèi)的方法,就不會(huì)有這種巨大的風(fēng)險(xiǎn),同時(shí)也實(shí)現(xiàn)了復(fù)用。

 

組合聚合復(fù)用原則的潛臺(tái)詞是:我只是用你的方法,我們不一定是同類(lèi)。

 

 

 

2、 在學(xué)習(xí)面向?qū)ο笃叽笤O(shè)計(jì)原則時(shí)需要注意以下幾點(diǎn):

 

a)       高內(nèi)聚、低耦合和單一職能的“沖突”

 

實(shí)際上,這兩者是一回事。內(nèi)聚,要求一個(gè)類(lèi)把所有相關(guān)的方法放在一起,初看是職能多,但有個(gè)“高”,就是要求把聯(lián)系非常緊密的功能放在一起,也就是說(shuō),從整體看,是一個(gè)職能的才能放在一起,所以,兩者是不同的表述而已。

 

這里很多人理解成復(fù)合類(lèi),但復(fù)合類(lèi)不是高內(nèi)聚,而是雜亂的放在一起,是一種設(shè)計(jì)失誤而已。

 

b)       多個(gè)單一職能接口的靈活性和聲明類(lèi)型問(wèn)題

 

如果一個(gè)類(lèi)實(shí)現(xiàn)多個(gè)接口,那么這個(gè)類(lèi)應(yīng)該用哪個(gè)接口類(lèi)型聲明呢?應(yīng)該是用一個(gè)抽象類(lèi)來(lái)繼承多個(gè)接口,而實(shí)現(xiàn)類(lèi)來(lái)繼承這個(gè)接口。聲明的時(shí)候,類(lèi)型是抽象類(lèi)。

 

c)        最少知識(shí)原則和中介類(lèi)泛濫兩種極端情況

 

這是另一種設(shè)計(jì)的失誤。迪米特原則要求類(lèi)之間要用中介來(lái)通訊,但類(lèi)多了以后,會(huì)造成中介類(lèi)泛濫的情況,這種情況,我們可以考慮中介模式,用一個(gè)總的中介類(lèi)來(lái)實(shí)現(xiàn)。

 

當(dāng)然,設(shè)計(jì)模式都有自己的缺陷,迪米特原則也不是十全十美,交互類(lèi)非常繁多的情況下,要適當(dāng)?shù)臓奚O(shè)計(jì)原則。

 

d)       繼承和組合聚合復(fù)用原則的“沖突”

 

繼承也能實(shí)現(xiàn)復(fù)用,那這個(gè)原則是不是要拋棄繼承了?不是的。

 

繼承更注重的是“血統(tǒng)”,也就是什么類(lèi)型的。而組合聚合更注重的是借用“技能”。并且,組合聚合中,兩個(gè)類(lèi)是部分與整體的關(guān)系,組合聚合可以由多個(gè)類(lèi)的技能組成。在C#和Java中只有單繼承。

 

這個(gè)原則不是告訴我們不用繼承了,都用組合聚合,而是在“復(fù)用”這個(gè)點(diǎn)上,我們優(yōu)先使用組合聚合。

 

 

 

面向?qū)ο笤O(shè)計(jì)原則的共性問(wèn)題:

 

1、這么多設(shè)計(jì)模式,都要學(xué)習(xí)和使用么?

 

答:我們只是掌握總體的原則,然后學(xué)習(xí)常用的就行了。實(shí)際開(kāi)發(fā)中也不是每種設(shè)計(jì)模式都會(huì)經(jīng)常用到。因?yàn)闅w根結(jié)底,設(shè)計(jì)模式也好,架構(gòu)也好,都是為需求服務(wù)的,沒(méi)有需求業(yè)務(wù)模型,不能生搬硬套模式。我們?cè)趯W(xué)習(xí)的時(shí)候,多學(xué)一些總是好的,但只是為了開(kāi)闊自己的眼界。

 

2、設(shè)計(jì)模式是規(guī)范么?是不是好的程序必須用設(shè)計(jì)模式?

 

答:嚴(yán)格來(lái)說(shuō),好的程序遵循的是設(shè)計(jì)原則,而非設(shè)計(jì)模式?,F(xiàn)在就出現(xiàn)很多新的演變出來(lái)的模式,這些都是因?yàn)槌霈F(xiàn)了新業(yè)務(wù)的原因,設(shè)計(jì)模式不是規(guī)范,只是一種借鑒。

 

3、使用設(shè)計(jì)模式會(huì)不會(huì)增加開(kāi)發(fā)難度?

 

答:開(kāi)發(fā)階段會(huì)的,而且會(huì)延長(zhǎng)開(kāi)發(fā)時(shí)間。但一個(gè)項(xiàng)目或產(chǎn)品從開(kāi)始到結(jié)束,開(kāi)發(fā)只是其中很小的一部分,考慮到維護(hù)和擴(kuò)展成本,才會(huì)出現(xiàn)設(shè)計(jì)模式。從整體考慮,設(shè)計(jì)模式是減少了開(kāi)發(fā)時(shí)間和成本的。

 

 

關(guān)于七種面向?qū)ο笤O(shè)計(jì)原則

 

面向?qū)ο笤O(shè)計(jì)原則是我們用于評(píng)價(jià)一個(gè)設(shè)計(jì)模式的使用效果的重要標(biāo)準(zhǔn)之一。

 

  下面我給大家介紹一下七種設(shè)計(jì)原則各是什么,以及其定義:

 

單一職責(zé)原則    定義:一個(gè)類(lèi)只負(fù)責(zé)一個(gè)領(lǐng)域的相應(yīng)職責(zé) 

 

開(kāi)閉原則  定義:軟件實(shí)體應(yīng)對(duì)擴(kuò)展開(kāi)放,而對(duì)修改關(guān)閉

 

里氏替換原則  定義:所有引用基類(lèi)的對(duì)象能夠透明的使用其子類(lèi)的對(duì)象

 

依賴倒轉(zhuǎn)原則  定義:抽象不應(yīng)該依賴于細(xì)節(jié),細(xì)節(jié)依賴于抽象

 

接口隔離原則  定義:使用多個(gè)專(zhuān)門(mén)的接口,而不是使用單一總接口

 

合成復(fù)用原則  定義:盡量使用對(duì)象組合,而不是繼承來(lái)達(dá)到復(fù)合目的

 

迪米特法則  定義:一個(gè)軟件實(shí)體應(yīng)當(dāng)盡可能少的與其它實(shí)體發(fā)生相互作用

 

  其中比較常用的是紅色字體,藍(lán)色字體僅次,黑色字體基本不使用。

 

 

 

里氏替換原則:父類(lèi)出現(xiàn)的方法,子類(lèi)一定可以替換。如果子類(lèi)不能完整實(shí)現(xiàn)父類(lèi)方法,或者父類(lèi)的方法在子類(lèi)中已經(jīng)發(fā)生了畸變,那么就要斷開(kāi)父子關(guān)系。采用依賴、聚合、組合等關(guān)系替代繼承。里氏替換原則可以用于檢測(cè)兩個(gè)類(lèi)是否具有父子關(guān)系。

 

 

 

7種常用的面向?qū)ο笤O(shè)計(jì)原則

 

設(shè)計(jì)原則名稱(chēng)

 

定義

 

使用頻率

 

單一職責(zé)原則

 

(Single Responsibility Principle, SRP)

 

一個(gè)類(lèi)只負(fù)責(zé)一個(gè)功能領(lǐng)域中的相應(yīng)職責(zé)

 

★★★★☆

 

開(kāi)閉原則

 

(Open-Closed Principle, OCP)

 

軟件實(shí)體應(yīng)對(duì)擴(kuò)展開(kāi)放,而對(duì)修改關(guān)閉

 

★★★★★

 

里氏代換原則

 

(Liskov Substitution Principle, LSP)

 

所有引用基類(lèi)對(duì)象的地方能夠透明地使用其子類(lèi)的對(duì)象

 

★★★★★

 

依賴倒轉(zhuǎn)原則

 

(Dependence Inversion Principle, DIP)

 

抽象不應(yīng)該依賴于細(xì)節(jié),細(xì)節(jié)應(yīng)該依賴于抽象

 

★★★★★

 

接口隔離原則

 

(Interface Segregation Principle, ISP)

 

使用多個(gè)專(zhuān)門(mén)的接口,而不使用單一的總接口

 

★★☆☆☆

 

合成復(fù)用原則

 

(Composite Reuse Principle, CRP)

 

盡量使用對(duì)象組合,而不是繼承來(lái)達(dá)到復(fù)用的目的

 

★★★★☆

 

迪米特法則

 

(Law of Demeter, LoD)

 

一個(gè)軟件實(shí)體應(yīng)當(dāng)盡可能少地與其他實(shí)體發(fā)生相互作用

 

★★★☆☆

 

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類(lèi)似文章 更多