Java设计模式总结
23 種設(shè)計(jì)模式的分類和功能
分類
設(shè)計(jì)模式有兩種分類方法,即根據(jù)模式的目的來(lái)分和根據(jù)模式的作用的范圍來(lái)分。
1. 根據(jù)目的來(lái)分
根據(jù)模式是用來(lái)完成什么工作來(lái)劃分,這種方式可分為創(chuàng)建型模式、結(jié)構(gòu)型模式和行為型模式 3 種。
創(chuàng)建型模式:用于描述“怎樣創(chuàng)建對(duì)象”,它的主要特點(diǎn)是“將對(duì)象的創(chuàng)建與使用分離”。GoF 中提供了單例、原型、工廠方法、抽象工廠、建造者等 5 種創(chuàng)建型模式。 結(jié)構(gòu)型模式:用于描述如何將類或?qū)ο蟀茨撤N布局組成更大的結(jié)構(gòu),GoF 中提供了代理、適配器、橋接、裝飾、外觀、享元、組合等 7 種結(jié)構(gòu)型模式。 行為型模式:用于描述類或?qū)ο笾g怎樣相互協(xié)作共同完成單個(gè)對(duì)象都無(wú)法單獨(dú)完成的任務(wù),以及怎樣分配職責(zé)。GoF 中提供了模板方法、策略、命令、職責(zé)鏈、狀態(tài)、觀察者、中介者、迭代器、訪問者、備忘錄、解釋器等 11 種行為型模式。2. 根據(jù)作用范圍來(lái)分
根據(jù)模式是主要用于類上還是主要用于對(duì)象上來(lái)分,這種方式可分為類模式和對(duì)象模式兩種。
類模式:用于處理類與子類之間的關(guān)系,這些關(guān)系通過繼承來(lái)建立,是靜態(tài)的,在編譯時(shí)刻便確定下來(lái)了。GoF中的工廠方法、(類)適配器、模板方法、解釋器屬于該模式。 對(duì)象模式:用于處理對(duì)象之間的關(guān)系,這些關(guān)系可以通過組合或聚合來(lái)實(shí)現(xiàn),在運(yùn)行時(shí)刻是可以變化的,更具動(dòng)態(tài)性。GoF 中除了以上 4 種,其他的都是對(duì)象模式。功能
前面說(shuō)明了 GoF 的 23 種設(shè)計(jì)模式的分類,現(xiàn)在對(duì)各個(gè)模式的功能進(jìn)行介紹。
單例(Singleton)模式:某個(gè)類只能生成一個(gè)實(shí)例,該類提供了一個(gè)全局訪問點(diǎn)供外部獲取該實(shí)例,其拓展是有限多例模式。
原型(Prototype)模式:將一個(gè)對(duì)象作為原型,通過對(duì)其進(jìn)行復(fù)制而克隆出多個(gè)和原型類似的新實(shí)例。
工廠方法(Factory Method)模式:定義一個(gè)用于創(chuàng)建產(chǎn)品的接口,由子類決定生產(chǎn)什么產(chǎn)品。
抽象工廠(Abstract Factory)模式:提供一個(gè)創(chuàng)建產(chǎn)品族的接口,其每個(gè)子類可以生產(chǎn)一系列相關(guān)的產(chǎn)品。
建造者(Builder)模式:將一個(gè)復(fù)雜對(duì)象分解成多個(gè)相對(duì)簡(jiǎn)單的部分,然后根據(jù)不同需要分別創(chuàng)建它們,最后構(gòu)建成該復(fù)雜對(duì)象。
代理(Proxy)模式:為某對(duì)象提供一種代理以控制對(duì)該對(duì)象的訪問。即客戶端通過代理間接地訪問該對(duì)象,從而限制、增強(qiáng)或修改該對(duì)象的一些特性。
適配器(Adapter)模式:將一個(gè)類的接口轉(zhuǎn)換成客戶希望的另外一個(gè)接口,使得原本由于接口不兼容而不能一起工作的那些類能一起工作。
橋接(Bridge)模式:將抽象與實(shí)現(xiàn)分離,使它們可以獨(dú)立變化。它是用組合關(guān)系代替繼承關(guān)系來(lái)實(shí)現(xiàn),從而降低了抽象和實(shí)現(xiàn)這兩個(gè)可變維度的耦合度。
裝飾(Decorator)模式:動(dòng)態(tài)的給對(duì)象增加一些職責(zé),即增加其額外的功能。
外觀(Facade)模式:為多個(gè)復(fù)雜的子系統(tǒng)提供一個(gè)一致的接口,使這些子系統(tǒng)更加容易被訪問。
享元(Flyweight)模式:運(yùn)用共享技術(shù)來(lái)有效地支持大量細(xì)粒度對(duì)象的復(fù)用。
組合(Composite)模式:將對(duì)象組合成樹狀層次結(jié)構(gòu),使用戶對(duì)單個(gè)對(duì)象和組合對(duì)象具有一致的訪問性。
模板方法(TemplateMethod)模式:定義一個(gè)操作中的算法骨架,而將算法的一些步驟延遲到子類中,使得子類可以不改變?cè)撍惴ńY(jié)構(gòu)的情況下重定義該算法的某些特定步驟。
策略(Strategy)模式:定義了一系列算法,并將每個(gè)算法封裝起來(lái),使它們可以相互替換,且算法的改變不會(huì)影響使用算法的客戶。
命令(Command)模式:將一個(gè)請(qǐng)求封裝為一個(gè)對(duì)象,使發(fā)出請(qǐng)求的責(zé)任和執(zhí)行請(qǐng)求的責(zé)任分割開。
職責(zé)鏈(Chain of Responsibility)模式:把請(qǐng)求從鏈中的一個(gè)對(duì)象傳到下一個(gè)對(duì)象,直到請(qǐng)求被響應(yīng)為止。通過這種方式去除對(duì)象之間的耦合。
狀態(tài)(State)模式:允許一個(gè)對(duì)象在其內(nèi)部狀態(tài)發(fā)生改變時(shí)改變其行為能力。
觀察者(Observer)模式:多個(gè)對(duì)象間存在一對(duì)多關(guān)系,當(dāng)一個(gè)對(duì)象發(fā)生改變時(shí),把這種改變通知給其他多個(gè)對(duì)象,從而影響其他對(duì)象的行為。
中介者(Mediator)模式:定義一個(gè)中介對(duì)象來(lái)簡(jiǎn)化原有對(duì)象之間的交互關(guān)系,降低系統(tǒng)中對(duì)象間的耦合度,使原有對(duì)象之間不必相互了解。
迭代器(Iterator)模式:提供一種方法來(lái)順序訪問聚合對(duì)象中的一系列數(shù)據(jù),而不暴露聚合對(duì)象的內(nèi)部表示。
訪問者(Visitor)模式:在不改變集合元素的前提下,為一個(gè)集合中的每個(gè)元素提供多種訪問方式,即每個(gè)元素有多個(gè)訪問者對(duì)象訪問。
備忘錄(Memento)模式:在不破壞封裝性的前提下,獲取并保存一個(gè)對(duì)象的內(nèi)部狀態(tài),以便以后恢復(fù)它。
解釋器(Interpreter)模式:提供如何定義語(yǔ)言的文法,以及對(duì)語(yǔ)言句子的解釋方法,即解釋器。
具體方法
一、單例模式(Singleton)
某個(gè)類只能生成一個(gè)實(shí)例,該類提供了一個(gè)全局訪問點(diǎn)供外部獲取該實(shí)例,其拓展是有限多例模式。
單例模式
二、模板模式(template)
定義一個(gè)操作中的算法骨架,而將算法的一些步驟延遲到子類中,使得子類可以不改變?cè)撍惴ńY(jié)構(gòu)的情況下重定義該算法的某些特定步驟。
模板模式
三、策略模式(Strategy)
定義了一系列算法,并將每個(gè)算法封裝起來(lái),使它們可以相互替換,且算法的改變不會(huì)影響使用算法的客戶。
參考大佬的講解鏈接
四、觀察者模式(Observer)
觀察者模式
五、工廠模式(Factory)
工廠模式
六、適配器模式(Adapter)
適配器模式
七、代理模式(Proxy)
代理模式
總結(jié)
以上是生活随笔為你收集整理的Java设计模式总结的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java序列化写法_java-spark
- 下一篇: Java并发编程实战 代码bug,Jav