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