資料學習整理自:B站尚硅谷
設計原則
設計模式原則,其實就是程式員在編程時,應當遵守的原則,也是各種設計模式的基礎(即:設計模式設計的依據)
1、單一職責原則
基本介紹
對類來說,即一個類應該只負責一項職責,
比如:一個類里面有兩個具體業務的不同方法,方法一修改時,可能會影響到方法二,所以此時應該拆分為兩個類,
細節
目的與優點:
1)降低類的復雜度,一個類只負責一項職責;
2)提高類的可讀性和可維護性;
3)降低變更引起的風險,
通常情況下,我們應擔遵守單一職責原則;
什么情況可以不遵守單一職責原則:
1)業務邏輯足夠簡單,代碼量足夠少;
2)類中的方法數量足夠少,可以在方法級遵守單一職責原則,
2、介面隔離原則
Interface Segregation Principle
基本介紹
一個類對另一個類的依賴,應該建立在最小的介面上,
比如:類A需要使用類B實作的介面1上的部分方法,類C需要使用類D實作的介面1上的部分方法,此時應該將介面1拆分成顆粒度更小的介面單元,
未遵循介面隔離原則:

應該調整為:

3、依賴倒置原則
Dependence Inversion Principle
基本介紹
1)高層模塊不應該依賴底層模塊,二者都應該依賴其抽象
2)抽象不應該依賴細節,細節應該依賴抽象
3)依賴倒置(倒轉)的中心思想是面向介面編程
4)依賴倒置原則的設計理念:
- 相對于細節的多邊形,抽象的東西更為穩定;
- 以抽象為基礎搭建的架構比以細節為基礎搭建的架構更為穩定;
- 在java中,抽象指的是介面和抽象類,細節指的是具體的實作類,
5)使用介面或抽象類的目的是制定規范(設計),而不涉及任何具體的操作,把展現細節的任務交給實作類完成,
依賴關系傳遞的三種方式
1)通過介面的傳遞實作依賴
//開關
interface IOpenAndClose{
public void open(ITV tv);//抽象方法接收抽象類
}
//電視
interface ITV{//ITV介面,可以涵蓋各種電視
public void play();
}
//具體實作
class OpenAndClose implements IOpenAndClose{
public void open(ITV tv){
tv.play;
}
}
// main >>> 給實作類傳入具體的電視
2)通過構造方法實作依賴
//開關
interface IOpenAndClose{
public void open(ITV tv);//抽象方法接收抽象類
}
//電視
interface ITV{//ITV介面,可以涵蓋各種電視
public void play();
}
//具體實作
class OpenAndClose implements IOpenAndClose{
ITV tv;
public OpenAndClose(ITV tv){
this.tv = tv;
}
public void open(){
this.tv.play;
}
}
// main >>> 給實作類傳入具體的電視
3)通過setter方法實作傳遞
//開關
interface IOpenAndClose{
public void open(ITV tv);//抽象方法接收抽象類
public void setTV(ITV tv);//set屬性
}
//電視
interface ITV{//ITV介面,可以涵蓋各種電視
public void play();
}
//具體實作
class OpenAndClose implements IOpenAndClose{
ITV tv;
public void setTV(ITV tv){
this.tv = tv;
}
public void open(){
this.tv.play;
}
}
// main >>> 給實作類傳入具體的電視
4、里氏替換原則
Liskov Substitution Principle
基本介紹
1)所有參考基類的地方必須能透明地使用其子類的物件;
2)在使用繼承時,在子類中盡量不要重寫父類的方法;
3)繼承實際上增強了兩個類之間的耦合性,適當情況下,可以通過聚合、組合、依賴或共同繼承一個更高級的類來解決問題,
總結:描述的就是子類繼承父類時,不要輕易去修改父類的方法,這樣會導致父類的方法變得不透明,當父類的方法修改時,子類重寫的方法將得不到改變,
5、開閉原則
Open Closed Principle
基本介紹
1)一個軟體物體如類、模塊和函式應該是對擴展開放,對修改關閉,用抽象構建框架,用實作擴展細節,
2)當軟體需要變化時,盡量通過 ,而不是通過修改已有的代碼來實作變化,
3)編程中遵循其他原則,以及使用設計模式的目的就是為了遵循開閉原則,
6、迪米特法則
Demeter Principle 最少知道原則
基本介紹
1)一個類對自己依賴的類知道的越少越好,
2)只與最直接的朋友通信:
? 直接的朋友:每個物件都會與其他物件有耦合關系,只要兩個物件之間有耦合關系,我們就說這兩個物件之間是朋友關系,耦合的方式很多:依賴、關聯、組合、聚合等,
- 我們稱出現成員變數、方法引數、方法回傳值中的類為直接的朋友;
- 出現在區域變數中的類不是直接的朋友(也就是說,陌生的類最好不要以區域變數的形式出現在類的內部,)
注意事項和細節
1)迪米特法則的核心是降低類之間的耦合;
2)由于每個類都減少了不必要的依賴,因此迪米特法則指示要求降低類之間(物件之間)耦合關系,并不是要求完全沒有依賴關系,
總結:只與最直接的朋友通信!如果目標不是最直接的朋友,那就嘗試把它變成最直接的朋友!
7、合成復用原則
Composite Reuse Principle
基本介紹
盡量使用合成/聚合的方式,而不是使用繼承
合成:
1)B類以引數的形式傳入A類;
2)B類創建A類的實體

聚合:
通過setter方法,把A類傳入B類

設計原則核心思想
1)找出應用中需要變化之處,把它們獨立出來,不要和那些不需要變化的代碼混在一起;
2)針對介面編程,而不是針對針對實作編程;
3)為了互動物件之間的松耦合設計而努力,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/34688.html
標籤:其他
下一篇:web前端介紹
