編程藝術(shù)的精髓——設(shè)計模式全覽

寫在前面

在編程世界中,設(shè)計模式如同優(yōu)雅的舞者,纏繞在代碼的脈絡(luò)中,引領(lǐng)著程序走向卓越。設(shè)計模式解決的是軟件開發(fā)中經(jīng)常出現(xiàn)的問題,他們?nèi)缤呀?jīng)在地圖上標注出來的道路,指引著我們走向目標。他們被劃分為創(chuàng)建型,結(jié)構(gòu)型和行為型三大類。創(chuàng)建型模式關(guān)注如何有效地創(chuàng)建對象;結(jié)構(gòu)型模式聚焦于如何建立整個系統(tǒng)的架構(gòu);行為型模式,則著重于對象之間的交互和責任分工。掌握設(shè)計模式,意味著你已經(jīng)能在編程的海洋中熟練地航行。讓我們一起,深入設(shè)計模式的世界,鑒賞他們的優(yōu)雅之處,體驗他們帶來的力量。希望這些設(shè)計模式的精煉總結(jié),可以幫你在編程道路上少走彎路,快速提升。

設(shè)計模式精煉

創(chuàng)造者模式

巧記:女媧造人,塑形造物。

總結(jié):創(chuàng)造者模式,也稱為建造者模式,是一種創(chuàng)建型設(shè)計模式。它專注于分步驟構(gòu)造復雜對象,各部分構(gòu)造過程獨立,實現(xiàn)了構(gòu)建和表示的解耦。正如你所說,就像女媧塑造人類一樣,一個一個部分塑造,最后構(gòu)成一個完整的人。它允許更精細地控制構(gòu)造過程,更易處理擁有大量需要配置的部分的復雜對象。優(yōu)點包括更好地管理創(chuàng)建細節(jié),隱藏構(gòu)造過程,并利于代碼的靈活性和可維護性。

單例模式

巧記:強者榮譽,獨步江湖。

總結(jié):單例模式保證類只有一個實例,并提供全局訪問點,如同一個獨步江湖的強者一樣,吸引所有人的注意力。常用于全局唯一的場景,如配置信息、硬件接口控制。優(yōu)點包括:保證唯一實例、延遲初始化、全局訪問點。


工廠模式

巧記:因材施教,滿足需求。

總結(jié):工廠模式可以根據(jù)輸入?yún)?shù)生成不同的對象,就像我們因材施教一樣,滿足各類學生的不同需求。它隱藏了對象創(chuàng)建的細節(jié),使代碼更加清晰,降低了客戶端與對象的耦合。優(yōu)點包括:降低耦合、提高代碼的可擴展性和可維護性。


策略模式

巧記:隨機應(yīng)變,靈活多變。

總結(jié):策略模式將不同的策略封裝成不同的類,通過改變策略對象,使得策略和算法可以靈活切換,實現(xiàn)多種不同的行為。就像我們隨機應(yīng)變一樣,能在不同的情況下靈活應(yīng)對。優(yōu)點包括:避免大量的條件判斷語句、提高算法的復用性和擴展性、提高代碼可讀性。


觀察者模式

巧記:風吹草動,影響四方。

總結(jié):觀察者模式定義了對象之間一對多的依賴關(guān)系,當一個對象(主題)的狀態(tài)發(fā)生改變時,所有依賴它的對象(觀察者)都會得到通知并自動更新。就像風吹草動,動靜都會引起周圍的注意。優(yōu)點包括:支持廣播通信、提高代碼的復用性、解耦觀察者和被觀察者。

裝飾器模式

巧記:靚裝扮靚,增色添彩。

總結(jié):裝飾器模式為對象動態(tài)添加功能,而不改變其內(nèi)部結(jié)構(gòu),仿佛給對象添上靚麗的裝飾物,讓它煥然一新。它提供比繼承更具彈性的替代方案,來擴展對象的行為。優(yōu)點包括:可動態(tài)擴展功能、可以進行多次裝飾、具有良好的封裝性。


組合模式

巧記:集思廣益,百花齊放。

總結(jié):組合模式為處理樹形結(jié)構(gòu)提供了解決方案,它將對象組合成樹形結(jié)構(gòu)以表示"部分-整體"的層次結(jié)構(gòu)。如同集思廣益,百花齊放,一棵樹由多個組成部分構(gòu)成,每個部分可以是一個整體。優(yōu)點包括:高層模塊調(diào)用簡單、節(jié)點自由增加。


適配器模式

巧記:變通之道,各美其美。

總結(jié):適配器模式可以將一個類的接口,轉(zhuǎn)換成客戶期望的另一個接口,斷開原有接口與實類的依賴,增加系統(tǒng)的靈活性。如同變通之道,能讓不同接口的類協(xié)同工作。優(yōu)點包括:增加了類的透明性、提高了類的復用性、靈活性好。


模板方法模式

巧記:定規(guī)矩,各抒己見。

總結(jié):模板方法模式定義了一個操作中算法的骨架,而將一些步驟延遲到子類中。使得子類可以不改變算法的結(jié)構(gòu),就可以重定義該算法的某些特定步驟。如同定了規(guī)矩,但提供了發(fā)揮空間。優(yōu)點包括:封裝了不變部分,擴展了可變部分、提供了代碼復用平臺、利于維護。

原型模式

巧記:如照鏡,視同觀音。

總結(jié):原型模式通過復制已有的實例,能夠快速地創(chuàng)建和克隆對象,而無需關(guān)心細節(jié),如同照鏡子一樣,倒影與實物一一對應(yīng)。它特別適用于創(chuàng)建復雜狀態(tài)的實例。優(yōu)點包括:提高效率、減少內(nèi)存使用、方便復制復雜對象。


狀態(tài)模式

巧記:靜如處子,動如脫兔。

總結(jié):狀態(tài)模式允許對象在內(nèi)部狀態(tài)改變時改變其行為,使得對象的行為看起來像是改變了類一樣。比如一位處子般靜默的人,行動起來可能又像兔子一樣迅捷。狀態(tài)模式讓狀態(tài)轉(zhuǎn)換邏輯顯式化,而避免了太多和狀態(tài)相關(guān)的條件或判斷語句。優(yōu)點包括:封裝了狀態(tài)轉(zhuǎn)換規(guī)則、將特定狀態(tài)的行為局部化。


橋接模式

巧記:兩廂情愿,兩全其美。

總結(jié):橋接模式將抽象部分與實現(xiàn)部分分離,使它們可以獨立變化,就像建造橋梁一樣,連接兩端,兩面皆可行走。它通過組合關(guān)系代替了傳統(tǒng)的繼承關(guān)系,更靈活地實現(xiàn)了抽象和實現(xiàn)部分的耦合。優(yōu)點包括:分離接口和實現(xiàn)、提高了系統(tǒng)的可擴展性、實現(xiàn)了細節(jié)對客戶的透明性。


訪問者模式

巧記:來者不拒,有求必應(yīng)。

總結(jié):訪問者模式提供了處理和操作數(shù)據(jù)結(jié)構(gòu)的最佳途徑,凡來者不拒,你想做什么,訪問者都能滿足你。它使我們可以在不改動數(shù)據(jù)結(jié)構(gòu)的前提下,增加新的作用于整個結(jié)構(gòu)的操作。優(yōu)點包括:擴展性好、使數(shù)據(jù)結(jié)構(gòu)和數(shù)據(jù)操作分離。

迭代器模式

巧記:一步一步,穩(wěn)扎穩(wěn)打。

總結(jié):迭代器模式提供了一種遍歷對象聚合的方式,而不需要暴露源數(shù)據(jù)的內(nèi)部表示。如同一步一步前進,聚焦在當前的元素,而非整個復雜的結(jié)構(gòu)。其優(yōu)點包括:提供了一種遍歷集合對象的簡單方法,無需關(guān)注集合對象的復雜性。


備忘錄模式

巧記:珍惜過往,銘記歷史。

總結(jié):備忘錄模式可以捕獲和存儲對象的內(nèi)部狀態(tài),以便后續(xù)恢復對象至此狀態(tài),如同珍惜過往一樣,銘記歷史,借以指導未來。其優(yōu)點包括:保存了對象的狀態(tài),不破壞對象的封裝性,簡化了對象本身的設(shè)計。


外觀模式

巧記:一攬子,統(tǒng)籌安排。

總結(jié):外觀模式提供了一個統(tǒng)一的高層接口,使得對子系統(tǒng)的訪問更加容易,類似于“一攬子”策略,提供統(tǒng)一的接口進行調(diào)度。其優(yōu)點包括:簡化了系統(tǒng)的訪問接口,對客戶屏蔽了內(nèi)部子系統(tǒng)的細節(jié),提高了使用的便捷性。

中介者模式

巧記:獨斷大事,指揮若定。

總結(jié):中介者模式通過引入一個中介對象來封裝一系列對象之間的交互行為,如同獨斷大事的指揮者,協(xié)調(diào)各個參與者,使得參與者之間不直接交互。優(yōu)點包括:簡化了對象之間的交互,提供了交互的集中控制,降低了系統(tǒng)的耦合度。

責任鏈模式

巧記:揚長避短,分工協(xié)作。

總結(jié):責任鏈模式對請求的發(fā)送者和接收者進行解耦,請求在一系列處理者對象構(gòu)成的鏈上進行發(fā)送,如同運動員之間的接力賽。每個處理者決定自己能否處理請求,不能處理則交給下一個處理者,形成一條責任鏈。其優(yōu)點包括:降低了請求的發(fā)送者和接收者之間的耦合度,把請求的處理流程明確了出來。


解釋器模式

巧記:溝通橋梁,無障礙交流。

總結(jié):解釋器模式為一個語言定義出其文法、語義,并根據(jù)定義設(shè)計出一個解釋器。你寫的代碼,通過解釋器運行,就如同語言的翻譯一樣,讓機器能理解你的意圖。其優(yōu)點包括:方便修改和擴展文法,每個文法規(guī)則能獨立定義和處理。


觀察者模式

巧記:風吹草動,消息傳遞。

總結(jié):觀察者模式在對象之間定義了一種一對多的依賴關(guān)系,當一端狀態(tài)改變時,所有依賴它的對象都會得到通知并且自動更新。就像窗戶一打開,風吹草動,消息迅速傳遞開來。其優(yōu)點包括:支持廣播通信,解耦了觀察者和被觀察者,便于動態(tài)添加/刪除觀察者。


享元模式

巧記:共享節(jié)約,皆大歡喜。

總結(jié):享元模式通過共享技術(shù)有效地支持大量細粒度的對象,如同社區(qū)公用設(shè)施一樣,所以叫享元模式。民以食為天,園林景致為民共享所需,減少開銷,增加系統(tǒng)性能。其優(yōu)點包括:大幅度降低內(nèi)存中對象的數(shù)量,使得相同對象被共享使用。

代理模式

巧記:引路人,幫你我。

總結(jié):代理模式提供了一個替身或者占位符以控制對其他對象的訪問,正如你在未知道路上需要一個引路人幫忙一樣。這樣可以處理更復雜的或者網(wǎng)絡(luò)遠程對象,隱藏了這些對象的具體信息和復雜性之處,同時也可以增加安全性,控制真實對象的訪問權(quán)限。其優(yōu)點包括:訪問控制、緩存功能、簡化復雜性和遠程訪問控制。

命令模式

巧記:有求必應(yīng),遙控人生。

總結(jié):命令模式將一個請求或操作封裝到一個對象中,它允許我們控制何時和如何執(zhí)行這些請求。就如同你擁有了遙控器一樣,想什么時候執(zhí)行就什么時候執(zhí)行,有求必應(yīng)。這讓我們可以把操作從它所在的環(huán)境中剝離出來,實現(xiàn)請求發(fā)送者和接收者之間的解耦,增強了系統(tǒng)的靈活性。優(yōu)點包括:降低系統(tǒng)的耦合度、擴展性良好、支持撤銷和恢復操作。

以上就是所有常用設(shè)計模式的總結(jié),希望對你有所幫助。一味地學習和記憶可能不會有太大的效果,設(shè)計模式最好的理解方式就是在實際的項目中運用和體會。如果上面的內(nèi)容對你有幫助,請點贊收藏哦,我會分享更多的經(jīng)驗~

分類

設(shè)計模式通常被分為三種類型:創(chuàng)建型,結(jié)構(gòu)型和行為型。

  1. 創(chuàng)建型模式:這類模式關(guān)注如何創(chuàng)建對象,特別是當系統(tǒng)對具體對象創(chuàng)建有特定需求時,如:
  • 工廠方法模式 (Factory Method)
  • 抽象工廠模式 (Abstract Factory)
  • 創(chuàng)造者者模式 (Builder)
  • 原型模式 (Prototype)
  • 單例模式 (Singleton)
  1. 結(jié)構(gòu)型模式:這類模式幫助我們確保各個系統(tǒng)元素之間保持適當?shù)年P(guān)系,以建立整個系統(tǒng)結(jié)構(gòu)。其中包括:
  • 適配器模式 (Adapter)
  • 橋接模式 (Bridge)
  • 組合模式 (Composite)
  • 裝飾器模式 (Decorator)
  • 外觀模式 (Facade)
  • 享元模式 (Flyweight)
  • 代理模式 (Proxy)
  1. 行為型模式:這類模式主要關(guān)注對象之間的責任分配。它們定義對象如何交互以及如何分配職責。其中包括:
  • 責任鏈模式 (Chain of Responsibility)
  • 命令模式 (Command)
  • 解釋器模式 (Interpreter)
  • 迭代器模式 (Iterator)
  • 中介者模式 (Mediator)
  • 備忘錄模式 (Memento)
  • 觀察者模式 (Observer)
  • 狀態(tài)模式 (State)
  • 策略模式 (Strategy)
  • 模板方法模式 (Template Method)
  • 訪問者模式 (Visitor)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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

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