《設計模式之禪》 設計模式大PK

2022-07-14 23:30:28 字數 1879 閱讀 2850

建立類模式包括工廠方法模式、建造者模式、抽象工廠模式、單例模式和原型模式。

其中單例模式要保持在記憶體中只有乙個物件,原型模式是要求通過複製的方式產生乙個新的物件。

【工廠方法(抽象工廠) vs 建造者模式】

共產方法模式關注的是乙個產品整體,但在建造者模式中,乙個具體產品的產生是依賴各個部件的產生以及裝配順序,它關注的是「由零件一步一步地組裝出產品物件」。

結構類模式包括介面卡模式、橋梁模式、組合模式、裝飾模式、門面(外觀)模式、享元模式和**模式。

因為它們都是通過組合類或物件產生更大結構以適應更高層次的邏輯需求。

【**模式 vs 裝飾模式】

**模式是把當前的行為或功能委託給其他物件執行,**類負責介面限定:是否可以呼叫真實角色,以及是否對傳送到真實角色的訊息進行變形處理,它不對被主題角色(也就是**類)的功能做任何處理,保證原汁原味的呼叫。

裝飾模式是在保證介面不變的情況下加強類的功能,它保證的是被修飾的物件功能比原始物件豐富(當然,也可以減弱),但不做准入條件判斷和准入引數過濾,如是否可以執行類的功能,過濾輸入引數是否合規等,這不是裝飾模式關心的。

【裝飾模式 vs 介面卡模式】

裝飾模式的意圖是加強物件的功能,介面卡模式關注的則是轉化,它的主要意圖是兩個不同物件之間的轉化。

行為類模式包括責任鏈模式、命令模式、直譯器模式、迭代器模式、中介者模式、備忘錄模式、觀察者模式、狀態模式,策略模式、模板方法模式、訪問者模式。

【命令模式 vs 策略模式】

命令模式多了乙個接受者角色

策略模式的意圖是封裝演算法,它認為演算法已經是乙個完整的、不可拆分的原子業務,即其意圖是讓這些演算法獨立,並且可以相互替換,讓行為的變化獨立於擁有行為的客戶

命令模式則是對動作的解耦,把乙個動作的執行分為執行物件(接受者角色)、執行行為(命令角色),讓兩者相互獨立而不相互影響

【策略模式 vs 狀態模式】

兩者都有乙個叫做context環境角色的類

策略模式封裝的是不同的演算法,演算法之間沒有互動,以達到演算法可以自由切換的目的;演算法必須是平行的

而狀態模式封裝的是不同的狀態,以達到狀態切換行為隨之發生改變的目的;則要求有一系列狀態發生變化的場景,它要求的是有狀態且有行為的場景

【門面模式 vs 中介模式】

門面模式只是增加了乙個門面,它對子系統來說沒有增加任何的功能,子系統若脫離門面模式是完全可以獨立執行的

中介者模式則增加了業務功能,它把各個同事類中的原有耦合關係移植到了中介者,同事類不可能脫離中介者而獨立存在,除非是想增加系統的複雜性和降低擴充套件性

包裝模式包括裝飾模式、門面模式、**模式、橋梁模式。包裝模式是不幹活的,只充當**功能。

**模式主要用在不希望展示乙個物件內部細節的場景中,比如乙個遠端服務不需要把遠端連線的所有細節都暴露給外部模組,通過增加乙個**類,可以很輕鬆地實現被**類的功能封裝。此外,**模式還可以用在乙個物件的訪問需要限制的場景中,比如aop。

裝飾模式是一種特殊的**模式,它倡導的是在不改變介面的前提下為物件增強功能,或者動態新增額外職責。就擴充套件性而言,它比子類更加靈活,例如在乙個已經執行的專案中,可以很輕鬆地通過增加裝飾類來擴充套件系統的功能。

介面卡模式的主要意圖是介面轉換,把乙個物件的介面轉換成系統希望的另外乙個介面,這裡的系統指的不僅僅是乙個應用,也可能是某個環境,比如通過介面轉換可以遮蔽外界介面,以免外界介面深入系統內部,從而提高系統的穩定性和可靠性。

橋梁模式是在抽象層產生耦合,解決的是自行擴充套件的問題,它可以使兩個有耦合關係的物件互不影響地擴充套件,比如對於使用筆畫圖這樣的需求,可以採用橋梁模式設計成用什麼筆(鉛筆、毛筆)畫什麼圖(圓形、方形)的方案,至於以後需求的變更,如增加筆的型別,增加圖形等,對該設計來說是小菜一碟。

門面模式是乙個粗粒度的封裝,它提供乙個方便訪問子系統的介面,不具有任何的業務邏輯,僅僅是乙個訪問複雜系統的快速通道,沒有它,子系統照樣執行,有了它,只是更方便訪問而已

《設計模式之禪》 結構類模式大PK

裝飾模式就是 模式的乙個特殊應用,兩者的共同點是都具有相同的介面,不同點則是 模式著重對 過程的控制,而裝飾模式則是對類的功能進行加強或減弱,它著重類的功能變化。模式是把當前的行為或功能委託給其他物件執行,類負責介面限定 是否可以呼叫真實角色,以及是否對傳送到真實角色的訊息進行變形處理,它不對被主題...

設計模式之禪之設計模式 門面模式

1 package com.yeepay.sxf.template18 2 3 寫信的業務類 4 隱藏在門面角色裡邊,不需要暴露太多5 author sxf6 7 8public inte ce iletterprocess view code 寫信的業務類的實現 1 package com.yee...

設計模式之禪之設計模式 橋梁模式

1 package com.yeepay.sxf.template24 2 3 實現化角色 4 相當於不同的業務邏輯,抽象出共有行為5 6 產品類7 author sxf8 9 10 public abstract class product view code 房子產品實現 1 package c...