設(shè)計(jì)原則與設(shè)計(jì)模式總結(jié)

一、設(shè)計(jì)原則

(一)核心思想

所有設(shè)計(jì)原則圍繞高內(nèi)聚、低耦合展開,最終目標(biāo)是讓代碼易理解、易擴(kuò)展、易維護(hù)。高內(nèi)聚指模塊內(nèi)部元素關(guān)聯(lián)緊密,專注單一功能;低耦合指模塊間依賴度低,僅通過(guò)接口交互。

(二)七大原則

  1. 單一職責(zé)原則(SRP)

    • 定義:一個(gè)類僅有一個(gè)引起它變化的原因,即只負(fù)責(zé)一項(xiàng)職責(zé)。
    • 核心作用:降低類的復(fù)雜度,減少需求變更帶來(lái)的影響,便于代碼復(fù)用與組合。
    • 記憶口訣:“一職一類”
    • 應(yīng)用場(chǎng)景:如學(xué)生管理系統(tǒng)中,學(xué)生實(shí)體類僅負(fù)責(zé)存儲(chǔ)學(xué)生信息,學(xué)生業(yè)務(wù)類負(fù)責(zé)處理學(xué)生相關(guān)業(yè)務(wù)邏輯。
  2. 開閉原則(OCP)

    • 定義:軟件實(shí)體對(duì)擴(kuò)展開放,對(duì)修改關(guān)閉。
    • 核心作用:通過(guò)新增代碼實(shí)現(xiàn)功能擴(kuò)展,避免修改原有穩(wěn)定代碼,降低需求變動(dòng)風(fēng)險(xiǎn),減少維護(hù)成本。
    • 記憶口訣:“擴(kuò)開改關(guān)”
    • 應(yīng)用場(chǎng)景:電商系統(tǒng)新增促銷活動(dòng)時(shí),通過(guò)新增促銷策略類實(shí)現(xiàn),而非修改原有價(jià)格計(jì)算邏輯。
  3. 里氏替換原則(LSP)

    • 定義:所有引用基類對(duì)象的地方,都能透明地使用其子類對(duì)象,子類可在任何場(chǎng)景替代父類且不改變程序邏輯。
    • 核心作用:保障繼承體系的穩(wěn)定性,支持多態(tài)復(fù)用,是實(shí)現(xiàn)代碼靈活擴(kuò)展的基礎(chǔ)。
    • 記憶口訣:“子類代父類,邏輯不改變”
    • 應(yīng)用場(chǎng)景:在圖形繪制系統(tǒng)中,圓形、矩形等子類可替代圖形父類對(duì)象進(jìn)行繪制操作。
  4. 依賴倒置原則(DIP)

    • 定義:上層模塊不依賴下層模塊,細(xì)節(jié)依賴抽象,兩者都應(yīng)依賴抽象。
    • 核心作用:降低模塊間耦合,提升系統(tǒng)擴(kuò)展性,便于替換具體實(shí)現(xiàn)。
    • 記憶口訣:“依賴抽象,而非具體”
    • 應(yīng)用場(chǎng)景:業(yè)務(wù)層依賴數(shù)據(jù)訪問(wèn)層的抽象接口,而非具體的數(shù)據(jù)庫(kù)實(shí)現(xiàn)類,方便切換不同數(shù)據(jù)庫(kù)。
  5. 接口隔離原則(ISP)

    • 定義:用多個(gè)小接口替代一個(gè)大接口,避免接口包含冗余方法。
    • 核心作用:減少接口依賴,降低類的實(shí)現(xiàn)成本,提高代碼靈活性。
    • 記憶口訣:“小接口,低依賴”
    • 應(yīng)用場(chǎng)景:將包含多種功能的用戶接口拆分為登錄接口、注冊(cè)接口、信息查詢接口等。
  6. 迪米特法則(LOD)

    • 定義:一個(gè)實(shí)體應(yīng)盡量少與其他實(shí)體發(fā)生相互作用,即最少知道原則。
    • 核心作用:降低系統(tǒng)復(fù)雜度,減少模塊間交互成本,提高模塊獨(dú)立性。
    • 記憶口訣:“少交互,低耦合”
    • 應(yīng)用場(chǎng)景:訂單類只需調(diào)用庫(kù)存服務(wù)類的接口,無(wú)需了解庫(kù)存服務(wù)類內(nèi)部的具體實(shí)現(xiàn)細(xì)節(jié)。
  7. 合成復(fù)用原則(CRP)

    • 定義:盡量使用合成/聚合的方式實(shí)現(xiàn)代碼復(fù)用,而非繼承。
    • 核心作用:避免繼承帶來(lái)的高耦合問(wèn)題,提高代碼靈活性與可維護(hù)性。
    • 記憶口訣:“合成聚合優(yōu),繼承慎用之”
    • 應(yīng)用場(chǎng)景:汽車類通過(guò)聚合發(fā)動(dòng)機(jī)類、輪胎類等實(shí)現(xiàn)功能,而非繼承這些類。

二、設(shè)計(jì)模式

(一)核心定義

設(shè)計(jì)模式是一套被反復(fù)使用、經(jīng)過(guò)分類編目的代碼設(shè)計(jì)經(jīng)驗(yàn)總結(jié),本質(zhì)是設(shè)計(jì)原則的具體實(shí)踐,旨在實(shí)現(xiàn)代碼可重用、易理解、高可靠。

(二)三大分類及常見(jiàn)模式

1. 創(chuàng)建型模式(聚焦對(duì)象創(chuàng)建)

核心作用是分離對(duì)象的創(chuàng)建與使用,簡(jiǎn)化對(duì)象創(chuàng)建過(guò)程。

  • 單例模式
    • 定義:保證一個(gè)類僅有一個(gè)實(shí)例,并提供全局訪問(wèn)點(diǎn)。
    • 核心作用:避免頻繁創(chuàng)建與銷毀對(duì)象,節(jié)省系統(tǒng)資源,確保全局狀態(tài)一致性。
    • 記憶口訣:“單例唯一,全局訪問(wèn)”
    • 應(yīng)用場(chǎng)景:全局配置類、數(shù)據(jù)庫(kù)連接池、日志對(duì)象等。
    • 實(shí)現(xiàn)方式:餓漢式(線程安全、無(wú)懶加載,易浪費(fèi)內(nèi)存)、懶漢式(支持懶加載,多線程需雙重鎖定或靜態(tài)內(nèi)部類保證安全)。
  • 工廠模式
    • 定義:創(chuàng)建對(duì)象時(shí)不暴露創(chuàng)建邏輯,通過(guò)共同接口指向新創(chuàng)建對(duì)象,包括簡(jiǎn)單工廠、工廠方法、抽象工廠。
    • 核心作用:解耦對(duì)象創(chuàng)建與使用,便于擴(kuò)展不同產(chǎn)品實(shí)例。
    • 記憶口訣:“工廠創(chuàng)建,邏輯隱藏”
    • 應(yīng)用場(chǎng)景:日志記錄器根據(jù)不同條件創(chuàng)建不同類型的日志對(duì)象;數(shù)據(jù)庫(kù)訪問(wèn)層根據(jù)配置創(chuàng)建不同數(shù)據(jù)庫(kù)連接對(duì)象。
  • 建造者模式
    • 定義:將復(fù)雜對(duì)象的構(gòu)建過(guò)程分解為多個(gè)簡(jiǎn)單步驟,逐步構(gòu)建復(fù)雜對(duì)象。
    • 核心作用:分離對(duì)象構(gòu)建與表示,靈活構(gòu)建不同配置的復(fù)雜對(duì)象。
    • 記憶口訣:“分步構(gòu)建,復(fù)雜對(duì)象”
    • 應(yīng)用場(chǎng)景:創(chuàng)建包含多個(gè)部件的電腦對(duì)象,可按不同配置逐步組裝。

2. 結(jié)構(gòu)型模式(處理類/對(duì)象組合)

核心作用是優(yōu)化類與對(duì)象的組合方式,提高系統(tǒng)靈活性與可擴(kuò)展性。

  • 適配器模式
    • 定義:將一個(gè)類的接口轉(zhuǎn)換為客戶端期望的另一種接口,使不兼容的類能夠協(xié)作。
    • 核心作用:解決接口不兼容問(wèn)題,復(fù)用現(xiàn)有類。
    • 記憶口訣:“接口適配,兼容協(xié)作”
    • 應(yīng)用場(chǎng)景:在新系統(tǒng)中復(fù)用舊系統(tǒng)的類,通過(guò)適配器轉(zhuǎn)換接口;不同格式的數(shù)據(jù)讀取,通過(guò)適配器統(tǒng)一讀取接口。
  • 裝飾器模式
    • 定義:動(dòng)態(tài)地給對(duì)象添加額外職責(zé),不改變對(duì)象原有結(jié)構(gòu)。
    • 核心作用:靈活擴(kuò)展對(duì)象功能,避免繼承帶來(lái)的類爆炸問(wèn)題。
    • 記憶口訣:“動(dòng)態(tài)裝飾,功能擴(kuò)展”
    • 應(yīng)用場(chǎng)景:給咖啡添加牛奶、糖等配料,通過(guò)裝飾器動(dòng)態(tài)擴(kuò)展咖啡功能。
  • 代理模式
    • 定義:通過(guò)代理對(duì)象控制對(duì)真實(shí)對(duì)象的訪問(wèn)。
    • 核心作用:實(shí)現(xiàn)訪問(wèn)控制、增強(qiáng)功能(如日志、事務(wù)、安全等)。
    • 記憶口訣:“代理控制,增強(qiáng)訪問(wèn)”
    • 應(yīng)用場(chǎng)景:Spring AOP通過(guò)動(dòng)態(tài)代理實(shí)現(xiàn)事務(wù)管理、日志記錄等橫切關(guān)注點(diǎn);遠(yuǎn)程代理實(shí)現(xiàn)遠(yuǎn)程對(duì)象訪問(wèn)。

3. 行為型模式(處理對(duì)象間協(xié)作)

核心作用是規(guī)范對(duì)象間的通信與協(xié)作方式,提高系統(tǒng)靈活性與可維護(hù)性。

  • 策略模式
    • 定義:定義一系列算法,將每個(gè)算法封裝起來(lái),使它們可相互替換。
    • 核心作用:動(dòng)態(tài)切換算法,避免大量條件判斷。
    • 記憶口訣:“算法封裝,動(dòng)態(tài)切換”
    • 應(yīng)用場(chǎng)景:電商系統(tǒng)根據(jù)不同促銷活動(dòng)切換不同的價(jià)格計(jì)算策略。
  • 觀察者模式
    • 定義:定義對(duì)象間的一對(duì)多依賴關(guān)系,當(dāng)一個(gè)對(duì)象狀態(tài)改變時(shí),其依賴者都能收到通知并自動(dòng)更新。
    • 核心作用:實(shí)現(xiàn)對(duì)象間的松耦合通信,便于擴(kuò)展觀察者。
    • 記憶口訣:“一對(duì)多,狀態(tài)變,通知更”
    • 應(yīng)用場(chǎng)景:消息訂閱系統(tǒng),訂閱者關(guān)注主題,主題狀態(tài)變化時(shí)通知所有訂閱者。
  • 模板方法模式
    • 定義:定義算法骨架,將步驟延遲到子類實(shí)現(xiàn)。
    • 核心作用:復(fù)用通用算法邏輯,子類專注實(shí)現(xiàn)差異化步驟。
    • 記憶口訣:“骨架定義,步驟延遲”
    • 應(yīng)用場(chǎng)景:Spring的JdbcTemplate封裝數(shù)據(jù)庫(kù)操作通用流程,用戶只需實(shí)現(xiàn)具體的結(jié)果映射邏輯。

三、記憶技巧總結(jié)

(一)設(shè)計(jì)原則記憶

  • 英文首字母記憶:?jiǎn)我宦氊?zé)(S)、開閉(O)、里氏替換(L)、接口隔離(I)、依賴倒置(D)、迪米特(L)、合成復(fù)用(C),可簡(jiǎn)化為“SOILDLC”輔助記憶。
  • 口訣記憶:結(jié)合前文各原則的記憶口訣,串聯(lián)成順口溜,如“一職一類,擴(kuò)開改關(guān),子類代父類,依賴抽象,小接口低依賴,少交互低耦合,合成聚合優(yōu)”。

(二)設(shè)計(jì)模式記憶

  • 分類記憶:按創(chuàng)建型、結(jié)構(gòu)型、行為型分類,分別記憶各類模式的核心特點(diǎn)與應(yīng)用場(chǎng)景。
  • 口訣記憶
    • 創(chuàng)建型:“抽工建單元”(抽象工廠、工廠方法、建造者、單例、原型)
    • 結(jié)構(gòu)型:“與時(shí)代相結(jié)合,裝外向”(適配器、代理、橋接、組合、裝飾、外觀、享元)
    • 行為型:“責(zé)令中介觀疊被,防撞車”(責(zé)任鏈、命令、中介者、觀察者、迭代器、備忘錄、訪問(wèn)者、狀態(tài)、策略),再加上模板方法模式。
最后編輯于
?著作權(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),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

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