設(shè)計(jì)模式(3)設(shè)計(jì)模式的基本原則(上)封裝變化的內(nèi)容、面向接口編程、多用組合
## 設(shè)計(jì)模式的基本原則(上)
總體來說設(shè)計(jì)模式是為了讓我們的代碼更加可讀、可擴(kuò)展、可復(fù)用、易于理解和維護(hù)。
設(shè)計(jì)模式的基本原則主要包括以下幾點(diǎn):
1. **封裝變化的內(nèi)容**
封裝是面向?qū)ο缶幊痰幕咎匦裕梢詫?duì)象的內(nèi)部狀態(tài)和行為隱藏起來,只暴露抽象的接口供外部使用。
封裝變化的內(nèi)容指的是將可能變化的內(nèi)容封裝起來。
未來內(nèi)容變化時(shí)只需要修改被封裝的部分,無需修改調(diào)用這個(gè)被封裝的接口的代碼。
從而將變更造成的影響最小化,提高代碼的可擴(kuò)展性和可維護(hù)性。
2. **面向接口編程而不是面向?qū)崿F(xiàn)編程**
對(duì)象和對(duì)象之間通過接口進(jìn)行交互,而不是直接調(diào)用對(duì)象的具體實(shí)現(xiàn)。
調(diào)用者不必關(guān)心被調(diào)用者的具體實(shí)現(xiàn),只需要針對(duì)被調(diào)用者接口實(shí)現(xiàn)自己的邏輯。
這樣被調(diào)用者可以遵循封裝變化的內(nèi)容原則,隨時(shí)修改自己的實(shí)現(xiàn),而不會(huì)影響調(diào)用者的代碼。
而且因?yàn)榻涌谑浅橄蟮模哉{(diào)用者可以更加靈活地使用不同的實(shí)現(xiàn)。
例如,通過多態(tài)的方式,調(diào)用者可以在運(yùn)行時(shí)動(dòng)態(tài)地選擇不同的實(shí)現(xiàn)。
3. **多用組合,少用繼承**
繼承是面向?qū)ο缶幊痰幕咎匦?,它可以讓子類繼承父類的屬性和方法。
繼承有其適用的場(chǎng)景和優(yōu)點(diǎn),例如代碼的復(fù)用、多態(tài)性和抽象等方面。
但在設(shè)計(jì)和使用繼承時(shí),需要權(quán)衡其優(yōu)點(diǎn)和缺點(diǎn),并根據(jù)具體情況選擇合適的設(shè)計(jì)原則和模式。
繼承的缺點(diǎn):
- 繼承會(huì)繼承父類的所有屬性和方法,包括一些不需要的內(nèi)容。
- 繼承會(huì)破壞封裝,子類可以訪問父類的所有屬性和方法。
- 在重寫父類方法時(shí),子類必須確保方法的行為是一致的,否則可能會(huì)導(dǎo)致意想不到的錯(cuò)誤。
- 容易引入復(fù)雜性,繼承層次過深或者過多,會(huì)導(dǎo)致代碼難以維護(hù)。
組合是一種弱耦合的關(guān)系,它可以將多個(gè)對(duì)象組合成一個(gè)更大的對(duì)象。
組合的優(yōu)點(diǎn)是它可以將變化的部分抽象成接口,而不是具體的實(shí)現(xiàn)。
通過組合的方式,我們可以更加靈活地替換組合對(duì)象的具體實(shí)現(xiàn)。
組合和繼承都是代碼復(fù)用的方式,但是繼承是一種強(qiáng)耦合的關(guān)系,而組合是一種弱耦合的關(guān)系。
因此,我們應(yīng)該盡量使用組合而不是繼承,以便讓我們的代碼更加靈活、可擴(kuò)展和可復(fù)用。
To be continued...