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