關於設計模式的文章就到這裏了,學習這門多設計模式,你是否是有這樣的疑惑,發現不少設計模式很相似,常常會混淆某些設計模式。這章節咱們將對設計模式作一個總結,看看各種設計模式有什麼區別。須要注意的是,設計模式在於理解,不在於形式。不要爲了套用設計模式而使用設計模式,而是,在業務上遇到問題時,很天然的想到設計模式做爲一種解決方案。本章節參考資料書籍《Spring 5核心原理》中的第一篇 Spring 內功心法(Spring中經常使用的設計模式)(若是以爲本文對你有用,請點個推薦)。算法
設計模式其實一門藝術。設計模式來源於生活,不要爲了套用設計模式而去使用設計模式。設計模式是在咱們迷茫時提供的一種解決問題的方案,或者說用好設計模式能夠防範於未然。自古以來 ,在咱們人生迷茫時,咱們每每都會尋求幫助,或上門諮詢,或查經問典。就在幾千年前,孔夫子就教給了咱們怎樣作人。對於中國人來講都知道:從出
生元嬰、二十加冕、三十而立、四十不惑、五十知天命、六十花甲、七十古稀不逾矩、8、九十耄耋... ...咱們這就是在用模板模式,固然,有些人不會選擇這套模板。設計模式總結的是經驗之談,總結的是前人的經驗,提供給後人去借鑑使用,前人栽樹,後人乘涼。設計模式能夠幫助咱們提高代碼的可讀性、可擴展性;下降維護成本;解決複雜的業務問題,可是,千萬千萬不要死記硬背,生搬硬套。設計模式
實際業務代碼中,一般會把工廠類設計爲單例。app
一、工廠模式包含工廠方法模式和抽象工廠模式是建立型模式,策略模式屬於行爲型模式。
二、工廠模式主要目的是封裝好建立邏輯,策略模式接收工廠建立好的對象,從而實現不一樣的行爲。學習
一、策略模式是委派模式內部的一種實現形式,策略模式關注的結果是否能相互替代。
二、委派模式更關注分發和調度的過程。優化
工廠方法是模板方法的一種特殊實現。對於工廠方法模式的create()方法而言,至關於只有一個步驟的模板方法模式。這一個步驟交給子類去實現。而模板方法呢,將needHomework()方法和checkHomework()方法交給子類實現,needHomework()方法和checkHomework()方法又屬於父類的某一個步驟且不可變動。設計
一、模板方法和策略模式都有封裝算法。
二、策略模式是使不一樣算法能夠相互替換,且不影響客戶端應用層的使用。
三、模板方法是針對定義一個算法的流程,將一些有細微差別的部分交給子類實現。
四、模板方法模式不能改變算法流程,策略模式能夠改變算法流程且可替換。策略模式一般用來代替if...else...等條件分支語句。代理
一、裝飾者模式關注點在於給對象動態添加方法,而代理更加註重控制對對象的訪問。
二、代理模式一般會在代理類中建立被代理對象的實例,而裝飾者模式一般把被裝飾者做爲構造參數。裝飾者和代理者雖然都持有對方引用,但邏輯處理重心是不同的。對象
一、裝飾者模式和適配器模式都是屬於包裝器模式(Wrapper Pattern)。
二、裝飾者模式能夠實現被裝飾者與相同的接口或者繼承被裝飾者做爲它的子類,而適配器和被適配者能夠實現不一樣的接口。繼承
裝飾者和適配器都是對某對象的包裝和擴展,屬於裝飾器模式的實現形式。可是裝飾者須要知足OOP的is-a關係,咱們也講過煎餅的例子,無論如何包裝都有共同的父類。而適配器主要解決兼容問題,不必定要統一父類,好比LoginAdapter和RegistAdapter就是兼容不一樣功能的兩個類,但RegistForQQAdapter須要註冊後自動登陸,所以既繼承了RegistAdpter又繼承了LoginAdapter。接口
適配器能夠結合靜態代理來實現,保存被適配對象的引用,但不是惟一的實現方式。
在適配業務複雜的狀況下,利用策略模式優化動態適配邏輯。