[引言]
在軟件開發(fā)的過程中,設(shè)計(jì)思想通常是最難學(xué)習(xí)和領(lǐng)悟的,我們經(jīng)常聽到面向?qū)ο?/a>設(shè)計(jì)思想、設(shè)計(jì)模式、面向接口、面向切片
[單一職責(zé)原則]
單一職責(zé)原則【SINGLE RESPONSIBILITY PRINCIPLE】:一個(gè)類只承擔(dān)一個(gè)職責(zé)。在我們?cè)O(shè)計(jì)類的時(shí)候,應(yīng)該盡量做到讓每一個(gè)類,有且僅有一個(gè)調(diào)用它的需求存在。因?yàn)槿绻硞€(gè)類承擔(dān)了過多的職責(zé)和調(diào)用需求,那么很有可能因?yàn)橐粋€(gè)需求的改變,影響或破壞其他需求的實(shí)現(xiàn)。
小博老師給大家舉個(gè)例子,大公司通常崗位分工明確,職責(zé)清晰,這樣的話每一個(gè)員工各司其職,業(yè)務(wù)開展井井有條。而小公司則往往一個(gè)人身兼數(shù)職,看似效率很高,但是很有可能因?yàn)槊τ谔幚砭o急事務(wù)而耽誤了核心重要工作。
[里氏替換原則]
里氏替換原則【LISKOV SUBSTITUTION PRINCIPLE】:任何基類可以出現(xiàn)的地方,子類一定可以出現(xiàn)。LSP是繼承復(fù)用的基石,只有當(dāng)衍生類可以替換掉基類,軟件單位的功能不受到影響時(shí),基類才能真正被復(fù)用,而衍生類也能夠在基類的基礎(chǔ)上增加新的行為。LSP一直以來被作為衡量繼承關(guān)系的質(zhì)量的標(biāo)準(zhǔn)。
[依賴倒置原則]
依賴倒置原則【DEPENDENCE INVERSION PRINCIPLE】:高層模塊不應(yīng)該依賴低層模塊,二者都應(yīng)該依賴其抽象;抽象不應(yīng)該依賴細(xì)節(jié);細(xì)節(jié)應(yīng)該依賴抽象。即針對(duì)接口編程,不要針對(duì)實(shí)現(xiàn)編程。
在我們編程設(shè)計(jì)的時(shí)候,不應(yīng)該考慮這里需要“哪個(gè)類的對(duì)象”,而應(yīng)該多考慮這里需要“可以做什么的對(duì)象”,其中“可以做什么”一般抽象為接口。也就是說程序設(shè)計(jì)中的所有抽象都應(yīng)該終止于接口。
[接口隔離原則]
接口隔離原則【INTERFACE SEGREGATION PRINCIPLE】:建立單一接口,不要建立龐大臃腫的接口,盡量細(xì)化接口,接口中的方法盡量少。這個(gè)原則與單一職責(zé)原則有點(diǎn)異曲同工的概念,只是一個(gè)針對(duì)類設(shè)計(jì)而言,一個(gè)針對(duì)接口設(shè)計(jì)而言。
[迪米特法則]
迪米特法則【LOW OF DEMETER】:低耦合,高內(nèi)聚??此坪唵蔚囊痪湓?,其實(shí)蘊(yùn)含了很寬泛的設(shè)計(jì)思想。
小博老師給大家舉個(gè)例子,電腦分為筆記本電腦和臺(tái)式電腦。筆記本電腦看似輕便、易于攜帶,但是如果筆記本的鍵盤壞了,我們往往需要將整臺(tái)筆記本一起送去維修,如果顯示屏出現(xiàn)了故障,則也需要將整臺(tái)筆記本一起送去維修……這其實(shí)就是因?yàn)楣P記本是一種高耦合、低內(nèi)聚的設(shè)計(jì)。而對(duì)比臺(tái)式電腦,如果我們鍵盤出現(xiàn)了問題,則只需要將鍵盤拆下來重新更換一個(gè)就可以,如果我們的顯示器出現(xiàn)了故障,我們只需要將顯示器拆下來單獨(dú)送去維修即可,不需要把笨重的機(jī)箱一起送過去……這就是因?yàn)榕_(tái)式機(jī)的設(shè)計(jì)遵循了低耦合、高內(nèi)聚的思想。
[開閉原則]
開閉原則【OPEN CLOSE PRINCIPLE】:又稱為“開放-封閉原則”,指程序設(shè)計(jì)過程中,對(duì)擴(kuò)展是開放的,而對(duì)于修改是封閉的。需求的改變和擴(kuò)展是不可避免的,但是我們只允許以擴(kuò)展新的內(nèi)容的方式來改變,而不允許修改已完成的內(nèi)容。
遵循此原則會(huì)讓我們?cè)趹?yīng)對(duì)需求改變時(shí)收放自如,代價(jià)最小化。對(duì)于版本更新頻度高的程序尤為重要。
[組合/聚合復(fù)用原則]
組合/聚合復(fù)用原則【Composition/Aggregation Reuse Principle(CARP) 】:盡量使用組合和聚合少使用繼承的關(guān)系來達(dá)到復(fù)用的原則。這個(gè)原則主張的是,為了達(dá)到復(fù)用的效果,不應(yīng)該有限選擇繼承關(guān)系,因?yàn)檫@樣會(huì)造成子類的泛濫,而應(yīng)該更多地、優(yōu)先地考慮使用組合或聚合關(guān)系。也就是說,在類關(guān)系的選擇時(shí),組合關(guān)系和聚合關(guān)系的優(yōu)先級(jí)要高于繼承關(guān)系。