GoF 的 23 种设计模式
文章目錄
- [學(xué)習(xí)地址 —— 不錯的學(xué)習(xí)網(wǎng)站](http://c.biancheng.net/view/8374.html) : http://c.biancheng.net/view/8374.html
- 創(chuàng)建型模式(5種)
- 單例模式
- 原型模型
- 工廠模式
- 簡單工廠模式(不算23種里面)
- 工廠方法模式
- 抽象工廠模式
- 建造者模式
- 結(jié)構(gòu)型模式(7種)
- 代理模式
- 適配器模式
- 橋接模式
- 裝飾器模式
- 外觀模式
- 享元模式
- 組合模式
- 行為型模式(11種)
- 模板方法模式
- 策略模式
- 命令模式
- 責(zé)任鏈模式
- 狀態(tài)模式
- 觀察者模式
- 中介者模式
- 迭代器模式
- 訪問者模式
- 備忘錄模式
- 解釋器模式
- 一句話歸納設(shè)計模式
學(xué)習(xí)地址 —— 不錯的學(xué)習(xí)網(wǎng)站 : http://c.biancheng.net/view/8374.html
創(chuàng)建型模式(5種)
單例模式
單例(Singleton)模式的定義:指一個類只有一個實例,且該類能自行創(chuàng)建這個實例的一種模式。例如,Windows 中只能打開一個任務(wù)管理器,這樣可以避免因打開多個任務(wù)管理器窗口而造成內(nèi)存資源的浪費,或出現(xiàn)各個窗口顯示內(nèi)容的不一致等錯誤。
原型模型
原型(Prototype)模式的定義如下:用一個已經(jīng)創(chuàng)建的實例作為原型,通過復(fù)制該原型對象來創(chuàng)建一個和原型相同或相似的新對象。在這里,原型實例指定了要創(chuàng)建的對象的種類。用這種方式創(chuàng)建對象非常高效,根本無須知道對象創(chuàng)建的細節(jié)。例如,Windows 操作系統(tǒng)的安裝通常較耗時,如果復(fù)制就快了很多。在生活中復(fù)制的例子非常多,這里不一一列舉了。
工廠模式
在日常開發(fā)中,凡是需要生成復(fù)雜對象的地方,都可以嘗試考慮使用工廠模式來代替。
工廠模式的定義:定義一個創(chuàng)建產(chǎn)品對象的工廠接口,將產(chǎn)品對象的實際創(chuàng)建工作推遲到具體子工廠類當中。這滿足創(chuàng)建型模式中所要求的“創(chuàng)建與使用相分離”的特點。
按實際業(yè)務(wù)場景劃分,工廠模式有 3 種不同的實現(xiàn)方式,分別是簡單工廠模式、工廠方法模式和抽象工廠模式。
簡單工廠模式(不算23種里面)
我們把被創(chuàng)建的對象稱為“產(chǎn)品”,把創(chuàng)建產(chǎn)品的對象稱為“工廠”。如果要創(chuàng)建的產(chǎn)品不多,只要一個工廠類就可以完成,這種模式叫“簡單工廠模式”。
簡單來說,簡單工廠模式有一個具體的工廠類,可以生成多個不同的產(chǎn)品,屬于創(chuàng)建型設(shè)計模式。簡單工廠模式不在 GoF 23 種設(shè)計模式之列。
簡單工廠模式每增加一個產(chǎn)品就要增加一個具體產(chǎn)品類和一個對應(yīng)的具體工廠類,這增加了系統(tǒng)的復(fù)雜度,違背了“開閉原則”。
“工廠方法模式”是對簡單工廠模式的進一步抽象化,其好處是可以使系統(tǒng)在不修改原來代碼的情況下引進新的產(chǎn)品,即滿足開閉原則。
工廠方法模式
注意:當需要生成的產(chǎn)品不多且不會增加,一個具體工廠類就可以完成任務(wù)時,可刪除抽象工廠類。這時工廠方法模式將退化到簡單工廠模式。
抽象工廠模式
抽象工廠(AbstractFactory)模式的定義:是一種為訪問類提供一個創(chuàng)建一組相關(guān)或相互依賴對象的接口,且訪問類無須指定所要產(chǎn)品的具體類就能得到同族的不同等級的產(chǎn)品的模式結(jié)構(gòu)。
抽象工廠模式是工廠方法模式的升級版本,工廠方法模式只生產(chǎn)一個等級的產(chǎn)品,而抽象工廠模式可生產(chǎn)多個等級的產(chǎn)品。
其缺點是:當產(chǎn)品族中需要增加一個新的產(chǎn)品時,所有的工廠類都需要進行修改。增加了系統(tǒng)的抽象性和理解難度。
從圖 2 可以看出抽象工廠模式的結(jié)構(gòu)同工廠方法模式的結(jié)構(gòu)相似,不同的是其產(chǎn)品的種類不止一個,所以創(chuàng)建產(chǎn)品的方法也不止一個
模式的應(yīng)用場景
抽象工廠模式最早的應(yīng)用是用于創(chuàng)建屬于不同操作系統(tǒng)的視窗構(gòu)件。如 Java 的 AWT 中的 Button 和 Text 等構(gòu)件在 Windows 和 UNIX 中的本地實現(xiàn)是不同的。
抽象工廠模式通常適用于以下場景:
模式的擴展
抽象工廠模式的擴展有一定的“開閉原則”傾斜性:
另一方面,當系統(tǒng)中只存在一個等級結(jié)構(gòu)的產(chǎn)品時,抽象工廠模式將退化到工廠方法模式。
建造者模式
建造者(Builder)模式的定義:指將一個復(fù)雜對象的構(gòu)造與它的表示分離,使同樣的構(gòu)建過程可以創(chuàng)建不同的表示,這樣的設(shè)計模式被稱為建造者模式。它是將一個復(fù)雜的對象分解為多個簡單的對象,然后一步一步構(gòu)建而成。它將變與不變相分離,即產(chǎn)品的組成部分是不變的,但每一部分是可以靈活選擇的。
建造者(Builder)模式和工廠模式的關(guān)注點不同:建造者模式注重零部件的組裝過程,而工廠方法模式更注重零部件的創(chuàng)建過程,但兩者可以結(jié)合使用。
模式的應(yīng)用場景
文章目錄
- [學(xué)習(xí)地址 —— 不錯的學(xué)習(xí)網(wǎng)站](http://c.biancheng.net/view/8374.html) : http://c.biancheng.net/view/8374.html
- 創(chuàng)建型模式(5種)
- 單例模式
- 原型模型
- 工廠模式
- 簡單工廠模式(不算23種里面)
- 工廠方法模式
- 抽象工廠模式
- 建造者模式
- 結(jié)構(gòu)型模式(7種)
- 代理模式
- 適配器模式
- 橋接模式
- 裝飾器模式
- 外觀模式
- 享元模式
- 組合模式
- 行為型模式(11種)
- 模板方法模式
- 策略模式
- 命令模式
- 責(zé)任鏈模式
- 狀態(tài)模式
- 觀察者模式
- 中介者模式
- 迭代器模式
- 訪問者模式
- 備忘錄模式
- 解釋器模式
- 一句話歸納設(shè)計模式
結(jié)構(gòu)型模式(7種)
代理模式
代理模式的定義與特點
代理模式的定義:由于某些原因需要給某對象提供一個代理以控制對該對象的訪問。這時,訪問對象不適合或者不能直接引用目標對象,代理對象作為訪問對象和目標對象之間的中介。
適配器模式
橋接模式
裝飾器模式
裝飾器(Decorator)模式的定義:指在不改變現(xiàn)有對象結(jié)構(gòu)的情況下,動態(tài)地給該對象增加一些職責(zé)(即增加其額外功能)的模式,它屬于對象結(jié)構(gòu)型模式。
外觀模式
外觀模式的定義與特點:
外觀(Facade)模式又叫作門面模式,是一種通過為多個復(fù)雜的子系統(tǒng)提供一個一致的接口,而使這些子系統(tǒng)更加容易被訪問的模式。該模式對外有一個統(tǒng)一接口,外部應(yīng)用程序不用關(guān)心內(nèi)部子系統(tǒng)的具體細節(jié),這樣會大大降低應(yīng)用程序的復(fù)雜度,提高了程序的可維護性。
享元模式
組合模式
組合模式的定義與特點
組合(Composite Pattern)模式的定義:有時又叫作整體-部分(Part-Whole)模式,它是一種將對象組合成樹狀的層次結(jié)構(gòu)的模式,用來表示“整體-部分”的關(guān)系,使用戶對單個對象和組合對象具有一致的訪問性,屬于結(jié)構(gòu)型設(shè)計模式。
文章目錄
- [學(xué)習(xí)地址 —— 不錯的學(xué)習(xí)網(wǎng)站](http://c.biancheng.net/view/8374.html) : http://c.biancheng.net/view/8374.html
- 創(chuàng)建型模式(5種)
- 單例模式
- 原型模型
- 工廠模式
- 簡單工廠模式(不算23種里面)
- 工廠方法模式
- 抽象工廠模式
- 建造者模式
- 結(jié)構(gòu)型模式(7種)
- 代理模式
- 適配器模式
- 橋接模式
- 裝飾器模式
- 外觀模式
- 享元模式
- 組合模式
- 行為型模式(11種)
- 模板方法模式
- 策略模式
- 命令模式
- 責(zé)任鏈模式
- 狀態(tài)模式
- 觀察者模式
- 中介者模式
- 迭代器模式
- 訪問者模式
- 備忘錄模式
- 解釋器模式
- 一句話歸納設(shè)計模式
行為型模式(11種)
模板方法模式
模板方法(Template Method)模式的定義如下:定義一個操作中的算法骨架,而將算法的一些步驟延遲到子類中,使得子類可以不改變該算法結(jié)構(gòu)的情況下重定義該算法的某些特定步驟。它是一種類行為型模式。
直接去掉vip就可以訪問…我超
策略模式
命令模式
責(zé)任鏈模式
責(zé)任鏈(Chain of Responsibility)模式的定義:為了避免請求發(fā)送者與多個請求處理者耦合在一起,于是將所有請求的處理者通過前一對象記住其下一個對象的引用而連成一條鏈;當有請求發(fā)生時,可將請求沿著這條鏈傳遞,直到有對象處理它為止。
狀態(tài)模式
狀態(tài)(State)模式的定義:對有狀態(tài)的對象,把復(fù)雜的“判斷邏輯”提取到不同的狀態(tài)對象中,允許狀態(tài)對象在其內(nèi)部狀態(tài)發(fā)生改變時改變其行為。
觀察者模式
觀察者(Observer)模式的定義:指多個對象間存在一對多的依賴關(guān)系,當一個對象的狀態(tài)發(fā)生改變時,所有依賴于它的對象都得到通知并被自動更新。這種模式有時又稱作發(fā)布-訂閱模式、模型-視圖模式,它是對象行為型模式。
中介者模式
中介者(Mediator)模式的定義:定義一個中介對象來封裝一系列對象之間的交互,使原有對象之間的耦合松散,且可以獨立地改變它們之間的交互。中介者模式又叫調(diào)停模式,它是迪米特法則的典型應(yīng)用。
迭代器模式
迭代器(Iterator)模式的定義:提供一個對象來順序訪問聚合對象中的一系列數(shù)據(jù),而不暴露聚合對象的內(nèi)部表示。
在日常開發(fā)中,我們幾乎不會自己寫迭代器。除非需要定制一個自己實現(xiàn)的數(shù)據(jù)結(jié)構(gòu)對應(yīng)的迭代器,否則,開源框架提供的 API 完全夠用。
訪問者模式
備忘錄模式
備忘錄(Memento)模式的定義:在不破壞封裝性的前提下,捕獲一個對象的內(nèi)部狀態(tài),并在該對象之外保存這個狀態(tài),以便以后當需要時能將該對象恢復(fù)到原先保存的狀態(tài)。該模式又叫快照模式。
解釋器模式
解釋器(Interpreter)模式的定義:給分析對象定義一個語言,并定義該語言的文法表示,再設(shè)計一個解析器來解釋語言中的句子。也就是說,用編譯語言的方式來分析應(yīng)用中的實例。這種模式實現(xiàn)了文法表達式處理的接口,該接口解釋一個特定的上下文。
一句話歸納設(shè)計模式
總結(jié)
以上是生活随笔為你收集整理的GoF 的 23 种设计模式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: sql中的left join、right
- 下一篇: 浙江省高等学校计算机等级考试有什么用,0