抽象工廠模式的起源或者最早的應用,是用於建立分屬於不同作業系統的視窗構建。比如:命令按鍵(button)與文字框(text)都是視窗構建,在unix作業系統的視窗環境和windows作業系統的視窗環境中,這兩個構建有不同的本地實現,它們的細節有所不同。
在每乙個作業系統中,都有乙個視窗構建組成的構建家族。在這裡就是button和text組成的產品族。而每乙個視窗構件都構成自己的等級結構,由乙個抽象角色給出抽象的功能描述,而由具體子類給出不同作業系統下的具體實現。
可以發現在上面的產品類圖中,有兩個產品的等級結構,分別是button等級結構和text等級結構。同時有兩個產品族,也就是unix產品族和windows產品族。unix產品族由unix button和unix text產品構成;而windows產品族由windows button和windows text產品構成。
系統對產品物件的建立需求由乙個工程的等級結構滿足,其中有兩個具體工程角色,即unixfactory和windowsfactory。unixfactory物件負責建立unix產品族中的產品,而windowsfactory物件負責建立windows產品族中的產品。這就是抽象工廠模式的應用,抽象工廠模式的解決方案如下圖:
顯然,乙個系統只能夠在某乙個作業系統的視窗環境下執行,而不能同時在不同的作業系統上執行。所以,系統實際上只能消費屬於同乙個產品族的產品。
在現代的應用中,抽象工廠模式的使用範圍已經大大擴大了,不再要求系統只能消費某乙個產品族了。因此,可以不必理會前面所提到的原始用意。
1.乙個系統不應當依賴於產品類例項如何被建立、組合和表達的細節,這對於所有形態的工廠模式都是重要的。
2.這個系統的產品有多於乙個的產品族,而系統只消費其中某一族的產品。
3.同屬於同乙個產品族的產品是在一起使用的,這一約束必須在系統的設計中體現出來。(比如:intel主機板必須使用intel cpu、intel晶元組)
4.系統提供乙個產品類的庫,所有的產品以同樣的介面出現,從而使客戶端不依賴於實現。
客戶端使用抽象工廠來建立需要的物件,而客戶端根本就不知道具體的實現是誰,客戶端只是面向產品的介面程式設計而已。也就是說,客戶端從具體的產品實現中解耦。
因為乙個具體的工廠實現代表的是乙個產品族,比如上面例子的從intel系列到amd系列只需要切換一下具體工廠。
如果需要給整個產品族新增乙個新的產品,那麼就需要修改抽象工廠,這樣就會導致修改所有的工廠實現類。
java設計模式 抽象工廠模式
1.概念 設計模式 一書中對於抽象工廠模式是這樣定義的 提供乙個建立一系列相關或相互依賴物件的介面,而無需指定它們具體的類。產品 plant介面 public inte ce plant 標誌介面 具體產品planta,plantb public class planta implements pl...
JAVA設計模式 抽象工廠模式
目錄 一 什麼是抽象工廠模式 二 模式中包含的角色及其職責 三 抽象工廠模式的優缺點 抽象工廠模式是所有形態的工廠模式中最為抽象和最具一般性的。抽象工廠模式可以向客戶端提供乙個介面,使得客戶端在不必指定產品的具體型別的情況下,能夠建立多個產品族的產品物件。抽象工廠 factory 角色 抽象工廠模式...
Java設計模式 抽象工廠模式
抽象工廠模式可以向客戶端提供乙個介面,使得客戶端在不必指定產品具體型別的情況下,建立多個產品族中的產品物件。這就是抽象工廠模式的用意。每個模式都是針對一定問題的解決方案。抽象工廠模式面對的問題是多產品等級結構的系統設計。在學習抽象工廠具體例項之前,應該明白兩個重要的概念 產品族和產品等級。產品族 是...