1. 程式人生 > >創建類模式大PK(總結)

創建類模式大PK(總結)

track 三種模式 這不 方式 抽象 一次 屏蔽 隱藏 關註

創建類模式包含工廠方法模式、建造者模式、抽象工廠模式、單例模式和原型模式,它們都可以提供對象的創建和管理職責。當中的單例模式和原型模式很easy理解,單例模式是要保持在內存中僅僅有一個對象,原型模式是要求通過復制的方式產生一個新對象。這兩個不easy混淆。以下主要分析其他三種模式。




一、工廠方法模式VS建造者模式

1、意圖不同
在工廠方法模式裏,關註的是一個產品總體,無須關心產品的各部分是怎樣創建出來的。但在建造者模式中,一個詳細產品的產生是依賴各個部件的產生以及裝配順序。它關註的是“由零件一步一步地組裝出產品對象”,簡單地說,工廠模式是一個對象創建的粗線條應用。建造者模式則是通過細線條勾勒出一個復雜對象,關註的是產品組成部分的創建過程。
2、產品的復雜度不同
工廠方法模式創建的產品一般都 是單一性質產品,而建造者模式創建的則是一個復合產品,它由各個部件復合而成。部件不同產品對象當然不同。這不是說工廠方法模式創建的對象簡單。而是指它們的粒度大小不同。

一般來說,工廠方法模式的對象粒度比較粗,建造者模式的產品對象粒度比較細。

實踐:假設須要具體關註一個產品部件的生產、安裝步驟,則選擇建造者,否則工廠。


二、抽象工廠模式VS建造者模式

抽象工廠模式就像一個巨頭有很多“工廠”,使用“工廠”來描寫敘述構建者。而建造者模式就像一個工廠有很多“車間”。使用“車間”來描寫敘述構建者。抽象工廠模式是從一個更高層次去看對象的創建。詳細到工廠內部還有非常多車間。但這些都是隱藏在工廠內部的細節,對外不發布。

而建造者模式就不同了,它是由車間構成,不同的車間完畢不同的創建和裝配任務,一個完整的汽車生產過程須要引擎制造車間、引擎裝配車間的配合才幹完畢,它們配合的基礎就是設計藍圖,而這個藍圖在車間主任手中(導演類)。建造者模式更關心建造過程。

盡管從外界來看一個車間還是生產車輛,可是這個車間的轉型是非常快的,僅僅要又一次設計一個藍圖。就可以產生不同的產品。



實踐:相對來說,抽象工廠模式比建造者模式的尺度要大,它關註產品總體。

而建造者模式關註構建過程,因此建行者模式能夠非常easy地構建出一個嶄新的產品。僅僅要導演類能夠提供詳細的工藝流程。也正由於如此。假設希望屏蔽對象的創建過程,僅僅提供一個封裝良好的對象,則能夠選擇抽象工廠方法模式。

而建造者模式能夠用在構件的裝配方面。如通過裝配不同的組件或者同樣組件的不同順序,能夠產生一個新的對象。它能夠產生一個非常靈活的架構,方便地擴展和維護系統。

創建類模式大PK(總結)