小博老師解析設(shè)計(jì)思想 ——七大設(shè)計(jì)原則

[引言]

在軟件開發(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)系。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 我們?cè)趹?yīng)用開發(fā)中,一般要求盡量做到可維護(hù)性和可復(fù)用性 應(yīng)用程序的復(fù)用可以提高應(yīng)用程序的開發(fā)效率和質(zhì)量,節(jié)約開發(fā)成本...
    Yochi閱讀 588評(píng)論 0 0
  • 程序設(shè)計(jì)的6大原則: 單一職責(zé)原則里氏替換原則依賴倒置原則接口隔離原則迪米特法則開閉原則 從根本學(xué)好,理解為什么要...
    silencefun閱讀 2,474評(píng)論 1 4
  • 單一職責(zé)原則 (SRP) 全稱 SRP , Single Responsibility Principle 單一職...
    米莉_L閱讀 1,865評(píng)論 2 5
  • 設(shè)計(jì)原則就是在設(shè)計(jì)模式背后更為深層的、更具有普遍性的、共同的思想原則,是提高軟件系統(tǒng)的可維護(hù)性和可復(fù)用性的指導(dǎo)原則...
    蘇先生Tongson閱讀 1,274評(píng)論 0 0
  • 何時(shí)來一場旅行 我也想 有一場旅行 帶著親近的人 帶著自己的心 走一遭從沒實(shí)現(xiàn)的旅行 記下路過的風(fēng)景 還有幾...
    七玲八落閱讀 162評(píng)論 0 3

友情鏈接更多精彩內(nèi)容