經常使用於將一個新接口適配舊接口算法
肥朝小聲逼逼:在咱們業務代碼中常常有新舊接口適配需求,能夠採用該模式。編程
將抽象和抽象的具體實現進行解耦,這樣可使得抽象和抽象的具體實現能夠獨立進行變化。設計模式
肥朝小聲逼逼:這個模式,其實咱們天天都在用到,可是你可能卻渾然不知。只要你用到面向接口編程,其實都是在用橋接模式。緩存
讓客戶端看起來在處理單個對象和對象的組合是平等的,換句話說,某個類型的方法同時也接受自身類型做爲參數。(So in other words methods on a type accepting the same type)框架
肥朝小聲逼逼:從上面那句英文咱們就能夠得知,組合模式經常使用於遞歸操做的優化上,好比每一個公司都有個boss系統,都會有什麼菜單的功能。好比一級菜單下有二級菜單,二級菜單又有三級菜單。刪除一級菜單的時候須要不斷刪除子菜單,那麼這個設計模式你能夠試試。總之,凡有級聯操做的,你均可以嘗試這個設計模式。分佈式
動態的給一個對象附加額外的功能,所以它也是子類化的一種替代方法。該設計模式在JDK中普遍運用,如下只是列舉一小部分學習
肥朝小聲逼逼:這個模式使用就太廣了,咱們經常使用的AOP,既有動態代理,也有裝飾者的味道。優化
爲一組組件,接口,抽象或子系統提供簡化的接口。設計
肥朝小聲逼逼:咱們天天使用的SLFJ日誌就是門面日誌,好比咱們使用Dubbo,向外提供的服務就儘可能採用門面模式,而後服務在調用各類service作聚合。3d
使用緩存來減小對小對象的訪問時間
肥朝小聲逼逼:只要用到了緩存,基本都是在使用享元模式。不少同窗都說本身的項目太low了,都沒有用到什麼設計模式,這不是開玩笑嗎,你用個map緩存幾個對象,基本上都運用了享元的思想。
代理模式用於向較簡單的對象代替建立複雜或耗時的對象。
肥朝小聲逼逼:代理模式用得很普遍,基本全部你們知道的開源框架,都用到了動態代理。
抽象工廠模式提供了一個協議來生成一系列的相關或者獨立的對象,而不用指定具體對象的類型。它使得應用程序可以和使用的框架的具體實現進行解耦。在JDK和許多開源框架,好比Spring中隨處可見,它們很容易被發現。任何用於建立對象但返回接口或抽象類的,就是抽象工廠模式了。(any method that is used to create an object but still returns a interface or abstract class)
肥朝小聲逼逼:從英文就能夠得出,該模式能夠與策略模式結合使用。
用於經過定義一個類來簡化複雜對象的建立,該類的目的是構建另外一個類的實例。構建器模式還容許實現Fluent接口。
肥朝小聲逼逼:這個在咱們業務代碼中使用的場景太普遍了。好比訂單系統大部分項目都有,訂單對象就是一個複雜對象,咱們就能夠採用建造者模式來作。
只是一個返回實際類型的方法。
肥朝小聲逼逼:這個屬於你們都會的設計模式,很少過介紹。
使得類的實例可以生成自身的拷貝。若是建立一個對象的實例很是複雜且耗時時,就可使用這種模式,而不從新建立一個新的實例,你能夠拷貝一個對象並直接修改它。
肥朝小聲逼逼:這個你覺得是冷門的設計模式,其實錯了,這個是大熱門的設計模式。好比咱們業務代碼,常常要各類DTO、BO、DO、VO轉換,其實就能夠參考原型設計模式的思想來作。
用來確保類只有一個實例。Joshua Bloch在Effetive Java中建議到,還有一種方法就是使用枚舉。
肥朝小聲逼逼:在平時開發中,單例是咱們用得最多的了,由於Spring的bean,默認就是單例級別的。單例屬於你們基本都會的設計模式。
經過把請求從一個對象傳遞到鏈條中下一個對象的方式來解除對象之間的耦合,直到請求被處理完畢。鏈中的對象是同一接口或抽象類的不一樣實現。
肥朝小聲逼逼:凡是帶有Filter
關鍵詞的,基本都在用這個設計模式。在業務代碼使用的場景實在是太多了,用到攔截器的地方基本都在用這個設計模式。
將命令包裝在對象中,以即可以將其存儲,傳遞到方法中,並像任何其餘對象同樣返回。
肥朝小聲逼逼:命令模式使用頻率較高,和策略模式比較像,具體區別能夠搜索一下。若是用過Activiti
工做流引擎的朋友能夠看一下里面的源碼,不少地方都用到了命令模式。
此模式一般描述爲該語言定義語法並使用該語法來解釋該格式的語句。(This pattern generally describes defining a grammar for that language and using that grammar to interpret statements in that format.)
肥朝小聲逼逼:這個比較冷門,肥朝沒怎麼用過,你用過的話能夠留言告訴肥朝。
提供一個統一的方式來訪問集合中的對象。
肥朝小聲逼逼:這個中間件和基礎框架組的同窗可能用得比較多,業務代碼的話用得很少,不過JDK中的這種使用很經典,能夠看看。
經過使用一箇中間對象來進行消息分發以及減小類之間的直接依賴。
肥朝小聲逼逼:看到這個描述不用我多說什麼,業務代碼使用的場景太多了。好比大家用MQ,其實就是在用中介者模式。因此肥朝一再強調,即便是天天CRUD,關注肥朝一塊兒學習,也能給你的CRUD項目,加上美顏+濾鏡(設計模式)的增強效果。
生成對象狀態的一個快照,以便對象能夠恢復原始狀態而不用暴露自身的內容。好比Date對象經過自身內部的一個long值來實現備忘錄模式。
肥朝小聲逼逼:這個在業務中使用得很少,據肥朝瞭解其中一種場景是,你要把數據丟到MQ,可是MQ暫時不可用,那麼你把數據暫存到DB,後面再輪詢丟到MQ。若是你有更好的場景,留言告訴肥朝。
它容許您抽象空對象的處理。
肥朝小聲逼逼:這個業務代碼用得很少,可是JDK中的這幾個方法咱們卻是挺經常使用的。
用於爲組件提供一種靈活地向感興趣的接收者廣播消息的方式。
肥朝小聲逼逼:咱們業務代碼通常是基於Zookeeper來作觀察者的。基本上用到ZK的地方,都是在用觀察者模式,好比分佈式鎖,好比服務發現等。
容許您在運行時根據內部狀態輕鬆更改對象的行爲。
肥朝小聲逼逼:這個在業務代碼用得就太普遍了,我就不信大家系統尚未「狀態」了。好比咱們常見的訂單狀態或者各類XX狀態,均可以用得上。
使用這個模式來將一組算法封裝成一系列對象。經過調用這些對象能夠靈活的改變程序的功能。
肥朝小聲逼逼:這個過高頻了,經常使用於優化大量的if-else
,若是這個設計模式都不會,出去不要說關注過肥朝的公衆號!
讓子類能夠重寫方法的一部分,而不是整個重寫,你能夠控制子類須要重寫那些操做。
肥朝小聲逼逼:這個模式也是很是高頻的模式。業務代碼中常常遇到有不少相同的部分,咱們能夠作一個抽象類,子類來實現差別化,若是還不知道的,趕忙搜索一下,再次強調,很是高頻。
提供一個方便的可維護的方式來操做一組對象。它使得你在不改變操做的對象前提下,能夠修改或者擴展對象的行爲。
肥朝小聲逼逼:這個肥朝使用的頻率不高,若是你有在業務代碼中使用,歡迎留言告訴肥朝。