設計模式討論之abstract factory篇

VRGL發表於2002-09-22
設計模式討論之abstract factory篇

有人說過,“不寫1M行程式碼,不能看設計模式。”
但似乎設計模式並非那麼神奇,下面用筆者的
一點粗淺認識,討論一下abstract factory設計
模式的主要部分。

首先,為什麼要用設計模式?GOF的設計模式
主要是用來減小耦合和提高複用的。而物件導向
的主要原則就是能private的,就不要protected;
能protected,就不要public。儘量不要把一些
重要的細節暴漏給自己的客戶類,以免不必要的
出現錯誤。當然這是從繼承的方面來說;而從
多型的方面來說,就是隻給客戶類暴漏抽象的基類
的介面,而這裡所指的介面就是基類的公有的部分。
客戶類每多知道抽象基類的具體子類的型別,也就多了
一分耦合。而僅提供抽象基類的介面給外界,
提高了抽象層次,也就是通用性,也就是複用性。

設計模式提倡的是:“優先使用組合,而不是繼承”。
但abstract factory模式中,並未使用組合,而只是
依賴(例項化),也就是說abstract factory模式的
內部,仍然有不小的耦合。

Abstract factory主要的好處是,客戶程式碼不僅不知道,
工廠類的具體型別,而且也不知道具體的產品型別,
具體的產品型別資訊被封裝到具體的工廠中了。所以,
客戶類只操縱工廠介面和產品介面,不知道具體的工廠產生
產品的實現細節,建立的複雜性被封裝了。

設計模式的主要目標是“把變化的和不變的分離,提高彈性”。
但在abstract factory中,彈性是有限的。即你可以從
抽象基類派生出不同的具體工廠實現生產不同的具體產品,
但所有這些都受限於你的介面,如果產品的改變非常之大,
以至於你的介面變化了,那麼客戶類的程式碼也得隨之改變。
也就是說,減小耦合失敗了。

相關文章