Aha!設計模式(4)-抽象工廠(3)
適用性
在以下情況可以使用Abstract Factory模式
• 一個系統要獨立於它的產品的建立、組合和表示時。
對於一個一定規模以上的軟體,經常會出現需要多個功能元件協同工作的情況。為了降低耦合性,增強擴充套件性,經常要對系統進行分解。這時將功能元件的建立,組合(協同動作)和表示分離是一種常用的方式。而功能元件的建立部分就可以使用抽象工程模式。
• 一個系統要由多個產品系列中的一個來配置時。
這種例子比較多,除了意圖部分視窗主題以外,許多稍微複雜一點資料處理系統也都可以考慮使用抽象工廠模式。
• 當你要強調一系列相關的產品物件的設計以便進行聯合使用時。
關聯產品的建立都是通過同一個具象工廠類建立,控制了工廠類,也就控制了關聯產品的組合關係。
• 當你提供一個產品類庫,而只想顯示它們的介面而不是實現時。
雖然實際動作的具象工廠類,產生的也是具象類的產品,但是對Clinet公開的只有抽象工廠類和抽象產品類。這樣就為產品類庫日後調整產品留下了餘地。
適用性歸納
上面列舉了四個場景,重點就是一件事:如果我們希望建立產品的過程與其他處理分離,就可以使用簡單工廠;如果還希望建立過程可擴充套件就可以使用抽象工廠模式。
《設計模式》適用性的第四種情況實際上是抽象工廠模式的副產品。
開發例項
除了《設計模式》中的例子以外,我們另外提供一個更加貼近開發的例子。
假設我們有這樣一個影象圖例軟體:需要處理的影象格式有gif和jpeg兩種,目前需求是顏色處理和大小處理。考慮到將來可能發生影象型別,處理內容的擴充套件,我們可以如下設計這個系統。
上面的類圖和前面的例子基本相同,唯一的差別就是兩個具象工廠類需要和所有的資料處理具象類之間有依賴關係。
下載連結
https://github.com/xueweiguo/OOThinking/blob/master/Aha!DesignPattern/Aha!DesignPattern.EAP
注:
本文中藍色粗體文字都引自《設計模式》一書。
覺得本文有幫助?請分享給更多人。
閱讀更多更新文章,請掃描下面二維碼,關注微信公眾號【面向物件思考】