1. 程式人生 > >【大話設計模式】--建造者模式VS裝飾模式/抽象工廠

【大話設計模式】--建造者模式VS裝飾模式/抽象工廠

裝飾模式?建造者模式?

   建造者模式(Builder)

   趣味理解:MM最愛聽的就是“我愛你”這句話了,見到不同地方的MM,要能夠用她們的方言跟她說這句話哦,我有一個多鍾語言翻譯機,上面每種語言都有一個按鍵,見到MM,我只要按對應的鍵,它就能夠用相應的語言說出“我愛你”這句話了餓,國外的MM也可以輕鬆搞定,這就是我的“我愛你”Builde

   定義:將一個複雜物件的構建和它的表示相分離,使得同樣的構建過程可以建立不同的表示。 


   裝飾模式(Decorator)

      趣味理解:Mary過完輪到Sarly過生日,還是不要叫她自己挑了,不然這個月伙食費肯定玩完,拿出我去年在華山頂上照的照片,在背面寫上“最好的禮物,就是愛你的Fita”,再到街上買個禮品店買了個相框,再找隔壁搞美術的Mike設計了一個漂亮的盒子裝起來,我們都是Decorator,最終都是在修飾我這個人呀,怎麼樣,看懂了嗎?

    定義:動態地給一個物件新增一些額外的職責,就增加功能來說,裝飾模式比生成子類更為靈活。  

建造者模式VS裝飾模式

   裝飾模式

   裝飾模式把每個要裝飾的功能放在單獨的類中,並讓這個類包裝它所要修飾的物件,因此,當需要執行特殊行為的時候,客戶程式碼就可以在執行時根據需要有選擇地、按順序地使用裝飾功能包裝物件了。

   優點:把類中的裝飾功能從類中搬移去除,這樣簡化了原來的類。有效地把類的核心職責與裝飾功能區分開了。並且可以去除相關類中重複的裝飾邏輯。

   缺點:1. 這種比繼承更加靈活機動的特性,也同時意味著更加多的複雜性。

         2. 裝飾模式會導致設計中出現許多小類,如果過度使用,會使程式變得很複雜。

         3. 裝飾模式是針對抽象元件(Component)型別程式設計。但是,如果你要針對具體元件程式設計時,就應該重新思考你的應用架構,以及裝飾者是否合適。當然也可以改變Component介面,增加新的公開的行為,實現“半透明”的裝飾者模式。在實際專案中要做出最佳選擇。

         4、此外裝飾模式的順序很重要,如加密資料和過濾詞彙如果先加密再過濾。肯定是會出問題

   建造者模式

   建造者主要用於建立一些複雜的物件,這些物件內部構建間的建造順序通常是穩定的,但是物件內部的構件通常是面臨著複雜的變化。

   優點:使得建造程式碼與表示程式碼分離。由於建造者隱藏了該產品是如何組裝的,所以若需要改變一個產品的內部表示,只需要再定義一個具體的建造者就可以了。

建造者模式VS抽象工廠

    這不免要想起工廠模式以及抽象工廠模式等等,它們的共同點就是使用者不必知道內部組成的細節,但是又有所不一樣,那就是建造者模式最主要的功能是基本方法的呼叫順序的安排,這些基本方法已經實現,而工廠方法則重點是建立,組裝順序則不關心。

   不同於抽象工廠的地方是:在抽象工廠模式中,客戶端例項化工廠類,然後呼叫工廠方法獲取所需產品物件,而在建造者模式中,客戶端可以不直接呼叫建造者的相關方法,而是通過指揮者類來指導如何生成物件,包括物件的組裝過程和建造步驟,它側重於一步步構造一個複雜物件,返回一個完整的物件。

相關推薦

大話設計模式--建造模式VS裝飾模式/抽象工廠

裝飾模式?建造者模式?    建造者模式(Builder):    趣味理解:MM最愛聽的就是“我愛你”這句話了,見到不同地方的MM,要能夠用她們的方言跟她說這句話哦,我有一個多鍾語言翻譯機,上面

設計模式建造模式

object lan pat alt pri 創建對象 private 關心 turn 1、定義 1.1 標準定義 建造者模式( Builder Pattern) 也叫做生成器模式, 其定義如下: Separate the construction of a complex

Unity3D與23種設計模式建造模式(Builder)

產出 private 一個 gof 行為 並且 bstr reac 定義 GoF中定義: “將一個復雜的構建流程與它的對象表現分離出來,讓相同的構建流程可以產生不同的對象行為表現。” 建造者模式可以分為兩個步驟來實施: 1.將復雜的構建流程獨立出來,並將整個流程分成

設計模式建造模式(建立型)

建造者模式      將一個物件的構建與它的表示分離,使得同樣的構建過程創建出不同的表示。 模型圖  程式碼 public abstract class Builder { public abstract void BuilderPar

設計模式-建造模式

###書面定義 將一個複雜物件的構建與它的表示分離,是的同樣的構建過程可以建立不同的表示。 ###個人理解 建造者模式就是把建造的過程給固定了,每個過程的具體部件可以更換,但是步驟不變,就像我們捏餃子,

設計模式——建造模式

【建造者模式】 建造者模式使用多個簡單的物件一步一步構建成一個複雜的物件。這種型別的設計模式屬於建立型模型,它提供一種建立物件的最佳方式 Builder類會一步一步構造出最終的物件,該Builder類是獨立於其他物件的   【介紹】   主要解決:

java設計模式建造模式---StringBuilder講解

在複習設計模式的時候,瞭解到StringBuilder使用了建造者模式,在此記錄一下。首先我們要了解建造者模式的構成。建立一個建造者模式的小栗子。我們建造一個屬性為Person的產品,同時建立Man 和Women.1.建立介面PersonBuilder,其中包含需要建立的 h

java設計模式之——建造模式、原型模式(建立性)讀書筆記

一、建造者模式(生成器模式)                 定義:將一個複雜物件的構建和它的表示分離開,使得同樣的構建過程可以得到不同的表示。                 效果:採用建造者模式,使用者只需要選擇建造的型別就可以得到它們,而具體的建造過程和細節就不需要

設計模式最終總結建造模式

建造者模式又稱為生成器模式,它是一種較為複雜、使用頻率也相對較低的建立型模式。建造者模式為客戶端返回的不是一個簡單的產品,而是一個由多個部件組成的複雜產品。   建造者模式概述 建造者模式(Builder Pattern):將一個複雜物件的構建與它的表示分離,使得同樣的構建過程可以建立不同的表

設計模式學習筆記建造模式

建造者模式,以某種形式組合出物件。它和工廠模式的區別在於是否有組合的概念。建造者模式中有產品物件,建造者物件,監工物件。產品物件是各種各樣的POJO,建造者以某種方式組合產品,監工就比較像工廠,獲取產品組合後的物件。這兩天看了菜鳥上的講解和設技模式之禪。這兩者講的有些不同。菜鳥上是產品物件的

java設計模式建造(Builder)模式

        我們還是舉上一節的例子:生產汽車。上一節我們通過模板方法模式控制汽車跑起來的動作,那麼需求是無止境的,現在如果老闆又增加了額外的需求:汽車啟動、停止、鳴笛引擎聲都由客戶自己控制,他想要什麼順序就什麼順序,那該如何做呢? 1. 汽車無休止的改造       

大話設計模式——淺談設計模式基礎

表示 無用功 隱式 art -s -m 個人 pri one   初學設計模式給我最大的感受是:人類真是偉大啊!單單是設計模式的基礎課程就讓我感受到了強烈的生活氣息。個人感覺《大話設計模式》這本書寫的真好。讓貌似非常晦澀難懂的設計模式變的生活化。趣味化。   以下淺談一

設計模式中介模式

col com fin 每一個 mediator std 一對一 類的方法 -1 1、 定義 1.1 標準定義 中介者模式的定義為:Define an object that encapsulates how a set of objectsinteract.Med

設計模式 觀察模式

new mes 一對多 建議 ios between 生存 兩個 開始 1、定義 1.1 標準定義 觀察者模式(Observer Pattern)也叫做發布訂閱模式(Publish/subscribe),它是一個在項目中經常使用的模式,其定義如下:Define a one-

大話設計模式》——建造模式

多個 構圖 str 業務邏輯 clas 邏輯 add [] -1 建造者模式結構圖 角色:1、builder:建造者接口。定義了建造一個產品所必須的所有流程。所有的建造者都需要實現該類,以確保實現建造一個產品所需的流程。 2、concreteBuilder:具體建造者。每

大話設計模式讀書筆記——開閉原則

等等 使用方式 價值 log 變更 重用 中間 多種實現 過程 開閉原則 在面向對象編程領域中,開閉原則規定“軟件中的對象(類,模塊,函數等等)應該對於擴展是開放的,但是對於修改是封閉的”[1],這意味著一個實體是允許在不改變它的源代碼的前提下變更它的行為。該特性在產品化

大話設計模式讀書筆記——代理模式

oid write 實現 == str href proxy logs i++ 代理模式 代理者是指一個類別可以作為其它東西的接口。代理者可以作任何東西的接口:網絡連接、內存中的大對象、文件或其它昂貴或無法復制的資源。 維基百科-代理模式 代理模式實現遠程圖片加載 /

大話設計模式讀書筆記——工廠方法模式

down 除了 wikipedia override 客戶 class a over dfa mar 工廠方法模式 工廠方法模式的實質是“定義一個創建對象的接口,但讓實現這個接口的類來決定實例化哪個類。工廠方法讓類的實例化推遲到子類中進行。 工廠方法模式 VS 簡單工廠

大話設計模式讀書筆記——原型模式

class splay 引用類型 play mark 工作經驗 好的 blog 我們 原型模式 原型模式是創建型模式的一種,其特點在於通過“復制”一個已經存在的實例來返回新的實例,而不是新建實例。被復制的實例就是我們所稱的“原型”,這個原型是可定制的。 原型模式多用於創建

PHP-設計模式觀察模式

author:咔咔 wechat:fangkangfk   這個模式,讓倆個不相關的類通過觀察者模式實現一個功能,個人觀點吧!不能為了使用設計模式而強硬使用設計模式,所有的模式都是一樣的,他只是一種思想而已   實現步驟: 1.定義一個observer