關於GOF23中設計模式的總結

2021-09-26 10:21:37 字數 3645 閱讀 6370

設計模式在於理解,不只在於形式。

不要為了套用設計模式而使用設計模式,而是,在業務上到遇到問題時,很自然地想到設計模式作為一種解決方案。

gof 23 種設計模式簡介

設計模式其實一門藝術。設計模式**於生活,不要為了套用設計模式而去使用設計模

式。設計模式是在我們迷茫時提供的一種解決問題的方案,或者說用好設計模式可以防

範於未然。自古以來 ,在我們人生迷茫時,我們往往都會尋求幫助,或上門諮詢,或查

經問典。我們這就是在用模板模式,當然,有些人不會選擇這套模板。

設計模式總結的是經驗之談,總結的是前人的經驗,提供給後人去借鑑使用,前人栽樹,

後人乘涼。設計模式可以幫助我們提公升**的可讀性、可擴充套件性;降低維護成本;解決

複雜的業務問題,但是,千萬千萬不要死記硬背,生搬硬套。

下面我們還是先來總體預覽一下 gof 23 種設計模式的歸納和總結。

分類 設計模式

建立型工廠方法模式(factory method)、抽象工廠模式(abstract factory)、

建造者模式(builder)、原型模式(prototype)、單例模式(singleton)

結構型介面卡模式(adapter)、橋接模式(bridge)、組合模式(composite)、

裝飾器模式(decorator)、門面模式(facade)、享元模式(flyweight)、

**模式(proxy)

行為型直譯器模式(interpreter)、模板方法模式(template method)、

責任鏈模式(chain of responsibility)、命令模式(command)、

迭代器模式(iterator)、調解者模式(mediator)、備忘錄模式(memento)、

觀察者模式(observer)、狀態模式(state)、策略模式(strategy)、

訪問者模式(visitor)

設計模式之間的關聯關係和對比

單例模式和工廠模式

實際業務**中,通常會把工廠類設計為單例。

策略模式和工廠模式

1、工廠模式包含工廠方法模式和抽象工廠模式是建立型模式,策略模式屬於行為型模

式。2、工廠模式主要目的是封裝好建立邏輯,策略模式接收工廠建立好的物件,從而實現不

同的行為。

策略模式和委派模式

1、策略模式是委派模式內部的一種實現形式,策略模式關注的結果是否能相互替代。

2、委派模式更關注分發和排程的過程。

模板方法模式和工廠方法模式

工廠方法是模板方法的一種特殊實現。

工廠方法模式 模板方法模式

對於工廠方法模式的 create()方法而言,相當於只有乙個步驟的模板方法模式。這乙個步

驟交給子類去實現。而模板方法呢,將 needhomework()方法和 checkhomework()方

法交給子類實現,needhomework()方法和 checkhomework()方法又屬於父類的某一

個步驟且不可變更。

模板方法模式和策略模式

1、模板方法和策略模式都有封裝演算法。

2、策略模式是使不同演算法可以相互替換,且不影響客戶端應用層的使用。

3、模板方法是針對定義乙個演算法的流程,將一些有細微差異的部分交給子類實現。

4、模板方法模式不能改變演算法流程,策略模式可以改變演算法流程且可替換。策略模式通

常用來代替 if...else...等條件分支語句。

策略模式 模板方法模式

1、wechatpay、jdpay、alipay 是交給使用者選擇且相互替代解決方案。而 jdbctemplate

下面的子類是不能相互代替的。

2、策略模式中的 querybalance()方法雖然在 pay()方法中也有呼叫,但是這個邏輯只是

出於程式健壯性考慮。使用者完全可以自主呼叫 querybalance()方法。而模板方法模式中

的 maprow()方法一定要在獲得 resultset 之後方可呼叫,否則沒有意義。

裝飾者模式和靜態**模式

1、裝飾者模式關注點在於給物件動態新增方法,而**更加注重控制對物件的訪問。

2、**模式通常會在**類中建立被**物件的例項,而裝飾者模式通常把被裝飾者作

為構造引數。

**模式 裝飾者模式

裝飾者和**者雖然都持有對方引用,但邏輯處理重心是不一樣的。

裝飾者模式和介面卡模式

2、裝飾者模式可以實現被裝飾者與相同的介面或者繼承被裝飾者作為它的子類,而適配

器和被適配者可以實現不同的介面。

介面卡模式 裝飾者模式

裝飾者和介面卡都是對 siginservice 的包裝和擴充套件,屬於裝飾器模式的實現形式。但是

裝飾者需要滿足 oop 的 is-a 關係,我們也講過煎餅的例子,不管如何包裝都有共同的父

類。而介面卡主要解決相容問題,不一定要統一父類,上圖中 loginadapter 和

registadapter 就是相容不同功能的兩個類,但 registforqqadapter 需要註冊後自動

登入,因此既繼承了 registadpter 又繼承了 loginadapter。

介面卡模式和靜態**模式

介面卡可以結合靜態**來實現,儲存被適配物件的引用,但不是唯一的實現方式。

介面卡模式和策略模式

在適配業務複雜的情況下,利用策略模式優化動態適配邏輯。

spring 中常用的設計模式對比

各設計模式對比及程式設計思想總結

設計模式 一句話歸納 舉例

工廠模式(factory) 只對結果負責,封裝建立過程。 beanfactory、calender

原型模式(prototype) 拔一根猴毛,吹出千萬個。 arraylist、prototypebean

**模式(proxy) 找人辦事,增強職責。 proxyfactorybean、

jdkdynamicaopproxy、cglibaopproxy

委派模式(delegate) 幹活算你的(普通員工),功

勞算我的(專案經理)。

dispatcherservlet、

beandefinitionparserdelegate

策略模式(strategy) 使用者選擇,結果統一。 instantiationstrategy

模板模式(template) 流程標準化,自己實現定製。 jdbctemplate、httpservlet

介面卡模式(adapter) 相容轉換頭。 advisoradapter、handleradapter

裝飾器模式(decorator) 包裝,同宗同源。 bufferedreader、inputstream、

觀察者模式(observer) 任務完成時通知。 contextloaderlistener

GOF23 設計模式

design patterns elements of reusable object oriented software 即後述 設計模式 一書 由 erich gamma richard helm ralph johnson 和 john vlissides 合著 addison wesley,...

GoF23種設計模式

設計模式的經典名著 design patterns elements of reusable object oriented software,中譯本名為 設計模式 可復用物件導向軟體的基礎 的四位作者erich gamma richard helm ralph johnson,以及john vli...

GoF 23種設計模式

建立型模式 factory模式 abstractfactory模式 singleton模式 builder模式 prototype模式 結構型模式 bridge模式 adapter模式 decorator模式 composite模式 flyweight模式 facade模式 proxy模式 行為模式...