設(shè)計模式的作用
概述
編寫軟件過程中,程序員面臨著來自 **耦合性**换棚、**內(nèi)聚性**以及**可維護性**没炒,**可擴展性**涛癌,**重用性**,**靈活性**等多方面的挑戰(zhàn)送火,設(shè)計模式就是讓為了解決這些問題而提出的
代碼重用性 相同功能的代碼拳话,不用多次編寫
可讀性 編程規(guī)范性,便于其他人閱讀跟理解
可擴展性 當(dāng)需要添加新功能是非常方便
可靠性 當(dāng)添加新功能后 對原來的功能沒有影響
七大原則
- 單一職責(zé)原則
- 接口隔離原則
- 依賴倒轉(zhuǎn)原則
- 里氏替換原則
- 開閉原則
- 迪米特法則
- 合成復(fù)用原則
1种吸、單一職責(zé)原則
就是一個類應(yīng)該只負責(zé)一項(一類)職責(zé)弃衍,例如Dao文件,一個Dao類只負責(zé)一個數(shù)據(jù)表的增刪改查坚俗,不能負責(zé)多個表或者說多類表
2镜盯、接口隔離原則
客戶端不應(yīng)該依賴它不需要的接口,即一個類對另一個類的依賴應(yīng)該建立在最小的接口上坦冠,只實現(xiàn)自己需要的接口
3形耗、依賴倒轉(zhuǎn)原則
- 高層模塊不應(yīng)該依賴低層模塊哥桥,二者都應(yīng)該依賴其抽象 模塊與模塊之間應(yīng)該使用接口進行依賴連接辙浑、
- 抽象不應(yīng)該依賴細節(jié),細節(jié)應(yīng)該依賴抽象
- 依賴倒轉(zhuǎn)的中心思想是面向接口編程
- 依賴倒轉(zhuǎn)原則是基于這樣的設(shè)計理念:相對于細節(jié)的多邊形拟糕,抽象的東西要穩(wěn)定的多判呕,以抽象為基礎(chǔ)搭建的架構(gòu)比以細節(jié)為基礎(chǔ)的架構(gòu)要穩(wěn)定的多,在java中送滞,抽象是指接口或抽象類侠草,細節(jié)就是具體的實現(xiàn)類。
- 使用接口或者抽象類的目的是定制好規(guī)范犁嗅,而不設(shè)計任何具體的操作边涕,把戰(zhàn)線細節(jié)的任務(wù)交給他們的實現(xiàn)類去完成
// 依賴關(guān)系的三種傳遞方式
interface A {
void info1();
}
interface B {
void info2();
}
interface C {
void info3();
}
class Denpendency {
private A a;
private B b;
public Denpendency(A a) {
this.a = a;
}
public void setB(B b) {
this.b = b;
}
public void showC (C c) {
c.info3();
}
}
4、里氏替換原則
**關(guān)于繼承的問題**
- 繼承包含這樣一層含義:父類中凡是已經(jīng)實現(xiàn)好的方法,實際上是在設(shè)定規(guī)范和契約功蜓,雖然它不強制要求所有的子類必須遵循這些契約园爷,但是如果子類對這些已經(jīng)實現(xiàn)的方法進行任何修改,就會對整個繼承體系造成破壞式撼。
- 繼承在給程序設(shè)計帶來便利的同時童社,也帶來了弊端,比如使用繼承會給程序來帶侵入性著隆,程序的可移植性降低扰楼,增加對象間的耦合性,如果一個類被其他的類鎖繼承美浦,則當(dāng)這個類需要修改時弦赖,必須考慮到所有的子類,并且父類修改后浦辨,所有涉及到的子類功能都有可能產(chǎn)生故障
- 問題提出:在編程中腾节,如何正確的使用繼承? => 里是替換原則
里氏替換原則基本介紹
- 如果對每個類型為T1的對象o1荤牍,都有類型為T2的對象o2案腺,使得以T1定義的所有程序P在所有的對象o1都代換成o2時,程序P的行為沒有發(fā)生變化康吵,那么類型T2是類型T1的子類型劈榨。換句話說,所有引用基類的地方都能透明的使用其子類的對象
- 在使用繼承時晦嵌,遵循里氏替換原則在子類中盡量不要重寫父類的方法同辣。
- 立體替換原則告訴我們,繼承實際上讓兩個類耦合性增強了惭载,在適當(dāng)?shù)那闆r下旱函,可以通過聚合,組合描滔,依賴來解決問題棒妨。
5、開閉原則
- 開閉原則是編程中最基礎(chǔ)含长、最重要的設(shè)計原則
- 一個軟件實體如類券腔,模塊和函數(shù)應(yīng)該對擴展開放,對修改關(guān)閉拘泞。用抽象構(gòu)造框架纷纫,用實現(xiàn)擴展細節(jié)。
- 當(dāng)軟件需要變化時陪腌,盡量通過擴展軟件實體的行為來實現(xiàn)變化辱魁,而不是通過修改以后有的代碼來實現(xiàn)變化
- 編程中遵循其他原則烟瞧,以及使用設(shè)計模式的的目的就是遵循開閉原則
6、迪米特法則
基本介紹
- 一個對象應(yīng)該對其他對象保持最少的了解
- 類與類關(guān)系越密切染簇,耦合度越大
- 迪米特法則又叫最少知道原則燕刻,即一個類對自己依賴的類知道的越少越好。也就是說對于被依賴的類不管多么負責(zé)剖笙,都盡量將邏輯封裝在類的內(nèi)部卵洗,對外除了提供的
public
方法,不對外泄露任何信息弥咪。 - 迪米特法則還有更簡單的定義:只與直接的朋友通信
- 直接的朋友:每個對象都會與其他對象有耦合關(guān)系过蹂,只要兩個對象之間有耦合關(guān)系,我們就說這兩個對象之間是朋友關(guān)系聚至。耦合的方式很多酷勺,依賴,關(guān)聯(lián)扳躬,組合脆诉,聚合等。其中我們稱出現(xiàn)成員變量贷币,方法參數(shù)击胜,方法返回值中的類為直接的朋友,而出現(xiàn)在局部變量中的類不是直接的朋友役纹。也就是說偶摔,陌生的類最好不要以局部變量的方式出現(xiàn)在類的內(nèi)部;
7促脉、合成復(fù)用原則
基本介紹
盡量使用組合辰斋、聚合的方式,而不是使用繼承