java 24种设计模式
設(shè)計模式的七大原則
一、創(chuàng)建型模式(5種)
1、單例模式(Singleton)
保證一個類只有一個實例,并提供一個全局訪問點。
有四種單例實現(xiàn)方式:java設(shè)計模式之單例模式singleton_現(xiàn)實、太殘忍的博客-CSDN博客
2、工廠模式(Factory)
把對象的創(chuàng)建功能交給工廠,達到解耦目的。
適合場景:
3、抽象工廠模式(Abstract Factory)
用于創(chuàng)建一系列相關(guān)的對象,?而無需指定其具體類
適合場景:
用例:spring的BeanFactory。和其他任何用于創(chuàng)建對象但返回接口或抽象類的就是此模式。
搭配模式:策略模式
4、生成器模式(Builder)
定義一個類來簡化復(fù)雜對象的創(chuàng)建(分步驟創(chuàng)建)。該類是為了構(gòu)建另一個類的實例。
適合場景:
用例:SpringApplicationBuilder、StringBuilder
5、原型模式(prototype)
使你能夠復(fù)制已有對象,?而又無需使代碼依賴它們所屬的類。
適合場景:
用例:spring的bean有單例模式singleton和原型模式prototype(scope=prototype)
二、結(jié)構(gòu)型模式(7種)
1、代理模式(Proxy)
代理控制著對于原對象的訪問(不能直接訪問原對象),?并允許在將請求提交給對象前后進行一些處理。
適合場景:
用例:jdk的Proxy類
2、適配器模式(Adapter)
用于新接口和舊接口的適配,使接口不兼容的對象能夠相互合作。
適合場景:
用例:springmvc的HandlerAdapter。例如xml轉(zhuǎn)json,可以新增XmlJsonAdapter適配器類內(nèi)進行轉(zhuǎn)換
3、橋接模式(bridge)
將抽象和抽象的具體實現(xiàn)進行解耦,使得抽象和抽象的具體實現(xiàn)可以進行獨立變化。并使用組合的方式將多維度的抽象方法聯(lián)系在一起
適合場景:
4、組合模式(composite)
可以使用它將對象組合成樹狀結(jié)構(gòu),以表示“部分-整體”的層次結(jié)構(gòu),?并且能像使用獨立對象一樣使用它們。
讓客戶端看起來在處理單個對象和對象的組合是平等的,換句話說,某個類型的方法同時也接受自身類型作為參數(shù)。例如Map的putAll(Map)方法
適合場景:
實例:
5、外觀模式/門面模式(Facade)
為一組接口、抽象類或子系統(tǒng)提供簡化的接口。并且要求一個子系統(tǒng)的外部與其內(nèi)部的通信必須通過一個統(tǒng)一的Facade對象進行。
Facade模式提供一個高層次的接口,使得子系統(tǒng)更易于使用
適合場景:
實例:
6、裝飾模式(Decorator/Wapper)
你通過將對象放入包含行為的特殊封裝對象中來為原對象綁定新的行為。相當(dāng)于動態(tài)的給一個對象附加額外的功能,因此它也是子類化的一種替代方法。(就是在不繼承的情況下,擴展類的功能)
實例:
7、享元模式(Flyweight)
它摒棄了在每個對象中保存所有數(shù)據(jù)的方式,?通過共享多個對象所共有的相同狀態(tài),?讓你能在有限的內(nèi)存容量中載入更多對象。
簡單來說就是使用緩存來減小對象的訪問時間(使用共享技術(shù)實現(xiàn)元素的共享)
適合場景:程序必須支持大量對象且沒有足夠的內(nèi)存容量時使用(共享變量)
實例:
只要用到了緩存,基本都是在使用享元模式
三、行為型模式(12種)
1、責(zé)任鏈模式(Chain of Responsibility)
將請求沿著處理者鏈進行發(fā)送。?收到請求后,?每個處理者均可對請求進行處理,?或?qū)⑵鋫鬟f給鏈上的下個處理者。
可以實現(xiàn)解耦。責(zé)任鏈中的對象是同一接口或抽象類的不同實現(xiàn)。
適合場景:
用例:
2、命令模式(Command)
將命令包裝在對象中,以便可以存儲、傳遞到方法中,并像任何其他對象一樣返回(以命令動作為類名)
命令模式可以把發(fā)出命令的責(zé)任和執(zhí)行命令的責(zé)任分開。
適合場景:
用例:
3、迭代器模式(Iterator)
讓你能在不暴露集合底層表現(xiàn)形式?(列表、?棧和樹等)?的情況下遍歷集合中所有的元素。
提供一個統(tǒng)一的方式來訪問集合中的對象。
適合場景:
用例:
4、中介模式(Mediator)
能讓你減少對象之間混亂無序的依賴關(guān)系。?該模式會限制對象之間的直接交互,?迫使它們通過一個中介者對象進行合作。(用一個中介對象來封裝一系列關(guān)于對象交互行為)
即使用一個中間對象來進行消息分發(fā)以及減少類之間的直接依賴
適合場景:
用例:
5、備忘錄模式(Memento)
允許在不暴露對象實現(xiàn)細節(jié)的情況下保存和恢復(fù)對象之前的狀態(tài)。
即生成對象狀態(tài)的一個快照,以便對象可以恢復(fù)原始狀態(tài)而不用暴露自身的內(nèi)容。
在不破壞封裝性的情況下,捕獲并保存一個類的內(nèi)部狀態(tài),可以利用該保存的狀態(tài)實施恢復(fù)操作。
適合場景:
用例:
6、觀察者模式/發(fā)布訂閱模式(Observer/Listener)
允許你定義一種訂閱機制,?可在對象事件發(fā)生時通知多個?“觀察”?該對象的其他對象。
適合場景:
用例:
7、狀態(tài)模式(State)
能在一個對象的內(nèi)部狀態(tài)變化時改變其行為,?使其看上去就像改變了自身所屬的類一樣。
即允許您在運行時根據(jù)內(nèi)部狀態(tài)輕松更改對象的行為。
狀態(tài)模式重點在各狀態(tài)之間的切換從而做不同的事情,狀態(tài)模式不同狀態(tài)下做的事情不同。
狀態(tài)模式封裝了對象的狀態(tài),因為狀態(tài)是跟對象密切相關(guān)的,它不能被重用
適合場景:
8、策略模式(Strategy)
它能讓你定義一系列算法,?并將每種算法分別放入獨立的類中,?以使算法的對象能夠相互替換
即將一組算法封裝成一系列對象。通過調(diào)用這些對象可以靈活的改變程序的功能
策略模式更側(cè)重于根據(jù)具體情況選擇策略,并不涉及切換。策略模式做的都是同一件事。
策略模式封裝算法或策略,通過從Context中分離出策略或算法,我們可以重用它們。
適合場景:
可以用策略模式和工廠模式優(yōu)化程序中過多的if-else
9、模版模式(template)
在超類中定義了一個算法的框架,?允許子類在不修改結(jié)構(gòu)的情況下重寫算法的特定步驟。
即讓子類可以重寫方法的一部分,而不是整個重寫,你可以控制子類需要重寫那些操作。
適合場景:
用例:
10、訪問者模式(Visitor)
提供一個方便的可維護的方式來操作一組對象。它使得你在不改變操作的對象前提下,可以修改或者擴展對象的行為。
它能將算法與其所作用的對象隔離開來。雖然可以在不改變原有類結(jié)構(gòu)的基礎(chǔ)上不斷添加新的功能。但是缺點是破壞了封裝性
適合場景:
11、空對象模式(Empty)
它允許抽象空對象的處理。
用例:
12、解釋器模式(Interpreter)
通常描述為該語言定義語法并使用該語法來解釋該格式的語句
用例:
更多更詳細設(shè)計模式請參考:常用設(shè)計模式有哪些?
總結(jié)
以上是生活随笔為你收集整理的java 24种设计模式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【软件开发底层知识修炼】十四 快速学习
- 下一篇: 安卓9.0官方系统升级包_华为、荣耀公布