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