Aha!設計模式 42 建立型模式的討論 1

2021-09-11 08:56:40 字數 1195 閱讀 5702

《設計模式》觀點

用乙個系統建立的那些物件的類對系統進行引數化有兩種常用方法。一種是生成建立物件的類的子類;這對應於使用factory method模式。這種方法的主要缺點是,僅為了改變產品類,就可能需要建立乙個新的子類。這樣的改變可能是級聯的(cascade)。例如,如果產品的建立者本身是由乙個工廠方法建立的,那麼你也必須重定義它的建立者。

另一種對系統進行引數化的方法更多的依賴於物件復合:定義乙個物件負責明確產品物件的類,並將它作為該系統的引數。這是abstract factory、builder和prototype模式的關鍵特徵。所有這三個模式都涉及到建立乙個新的負責建立產品物件的「工廠物件」。abstract factory由這個工廠物件產生多個類的物件。 builder由這個工廠物件使用乙個相對複雜的協議,逐步建立乙個複雜產品。 prototype由該工廠物件通過拷貝原型物件來建立產品物件。在這種情況下,因為原型負責返回產品物件,所以工廠物件和原型是同乙個物件。

作者觀點

以下為作者的理解,和《設計模式》中的觀點略有不同。請各位自己判斷採納。

替換系統(或者是)使用的物件的具體型別有以下種常用的方式。

一種方式是準備某些類的子類,這些子類可以建立需要替換的物件。工廠方法模式就屬於這種方式。這種方法的主要缺點是,為了改變產品類,一般需要建立新的子類。另外這種方式在需要構建多種產品的時候,會讓構建物件的類的職責顯得比較模糊。

另一種方式是定義乙個專門負責生成產品的類,將它作為系統的引數。這種情況包括抽象工廠模式和建造者(builder)模式。這兩種方式需要專門用於生成物件的類。

最後一種方式是,通過複製已有物件的到新物件。對應的是原型模式。如果僅從功能是否單一的角度來說,將原型模式分到第一種方式更加合理。

上述內容也可以參照下圖理解:

無論哪種方式,都堅持乙個原則,就是不讓使用者接觸實際的產品類。看不見,摸不著,自然就沒有了耦合性。

注:

本文中藍色粗體文字都引自《設計模式》一書。

設計模式 建立型模式 原型模式

1 原型模式 prototype模式 是指 用原型例項指定建立物件的種類,並且通過拷貝這些原型,建立新的物件 2 原型模式是一種建立型設計模式,允許乙個物件再建立另外乙個可定製的物件,無需知道如何建立的細節 3 工作原理是 通過將乙個原型物件傳給那個要發動建立的物件,這個要發動建立的物件通過請求原型...

設計模式 建立型模式

建立型模式 與物件的建立有關。1 簡單工廠模式 靜態工廠 簡單工廠關聯具體類,通過簡單工廠來建立具體的類。封裝變化到簡單工廠裡面去。工廠類 具體類 2 工廠模式 抽象工廠 具體工廠 具體類 要是新增新的類,只需要擴充套件就可以了。他們對外的行為是一致的。3 抽象工廠 抽象工廠 具體工廠 具體類 具體...

設計模式 建立型模式

建立型模式 工廠方法 核心 客戶端呼叫具體的工廠,讓工廠去決定例項化哪個具體的類。核心 為工廠類建立對應的具體的類,表現為和對應的具體類的依賴關係。抽象工廠類 inte ce productfactory 具體a工廠 class concreteproductfactorya productfact...