抽象工廠模式 (abstract factory)提供乙個建立一系列相關或相互依賴物件的介面,而無需指定它們具體的類。
抽象工廠模式是一種類建立型模式(可參考設計模式 建立型模式)。
回到頂部
圖-抽象工廠模式結構圖
抽象工廠模式包含以下角色:
abstractproduct: 宣告乙個介面,這個介面中包含產品物件型別。
abstract class abstractproducta
abstract class abstractproductb
concreteproduct: 定義乙個產品物件,這個產品物件是由相關的具體工廠建立的。
class concreteproducta1 extends abstractproducta
}class concreteproducta2 extends abstractproducta
}class concreteproductb1 extends abstractproductb
}class concreteproductb2 extends abstractproductb
}abstractfactory: 宣告乙個介面,這個介面中包含建立抽象產品物件的方法。
abstract class abstractfactory
concretefactory: 實現建立具體產品物件的方法。
class concretefactory1 extends abstractfactory
@override
public abstractproductb createproductb()
}class concretefactory2 extends abstractfactory
@override
public abstractproductb createproductb()
}client: 只使用abstractfactory和abstractproduct宣告的介面。
public class abstarctfactorypattern
}執行結果
concreteproducta1
concreteproductb1
concreteproducta2
concreteproductb2
回到頂部
乙個系統要獨立於它的產品的建立、組合和表示時。
乙個系統要由多個產品系列中的乙個來配置時。
當你要強調一系列相關的產品物件的設計以便進行聯合使用時。
當你提供乙個產品類庫,而只想顯示它們的介面而不是實現時。
回到頂部
(1)抽象工廠模式隔離了具體類的生成,使用者並不需要知道什麼被建立。由於這種隔離,更換乙個具體工廠變得相對容易。所有的具體工廠都實現了抽象工廠中定義的那些公共介面,因此只需要改變具體工廠的例項,就可以在某種程度上改變整個軟體系統的行為。另外,應用抽象工廠模式可以實現高內聚低耦合的設計目的,因此抽象工廠模式得到了廣泛的應用。
(2)當乙個產品族中的多個物件被設計成一起工作時,它能夠保證客戶端始終只使用同乙個產品族中的物件。這對一些需要根據當前環境來決定其行為的軟體系統來說,是一種非常實用的設計模式。
(3)增加新的具體工廠和產品族很方便,無須修改已有系統,符合「開放封閉原則」。
在新增新的產品物件時,難以擴充套件抽象工廠來生產新種類的產品,這是因為在抽象工廠角色中規定了所有可能被建立的產品集合,要支援新種類的產品就意味著要對該介面進行擴充套件,而這將涉及到對抽象工廠角色及其所有子類的修改,顯然會帶來較大的不便。
回到頂部
眾所周知,蘋果和三星這兩家世界級的電子產品廠商都生產手機和電腦。
我們以生產手機和電腦為例,演示一下抽象工廠模式的應用
首先,定義手機和電腦兩個抽象介面,他們都有各自的產品資訊
inte***ce telephone
inte***ce computer
concreteproduct根據abstractproduct來定義具體的產品屬性、方法。
在我們的例子中,蘋果、三星兩家公司的手機和電腦都有各自的具體產品資訊。
蘋果,三星這兩個廠商都生產手機和電腦。所以它們可以有乙個抽象父類或父介面,提供生產手機和生產電腦的方法。
inte***ce electronicfactory
蘋果、三星工廠分別實現父介面,生產不同型別的產品。
測試**
執行結果
蘋果手機,採用ios系統
蘋果電腦,採用mac系統
抽象工廠模式 常用設計模式 抽象工廠模式
提供乙個建立一系列相關或相互依賴物件的介面,而無需指定它們具體的類。在工廠方法模式中,我們的具體建立者每次使用都只能建立乙個同型別的物件,假如我們現在需要的是多個不同型別的物件,工廠方法就滿足不了需求了。這時我們可以把多個工廠方法組合到乙個類,這就是抽象工廠模式,它就是專門用來建立多個產品,也可以說...
抽象工廠模式 設計模式(九) 抽象工廠模式
提供乙個為建立一組相關或相互依賴物件的介面,且無須指定它們的具體類。它屬於建立型模式。在抽象工廠模式中,每個具體工廠都提供了多個用於建立多種不同型別具體物件的方法,這些不同型別的物件都存在乙個共同的屬性,構成乙個族。上篇文章設計模式 八 工廠方法模式說到工廠方法模式中只考慮某一類產品的生產,例如可樂...
設計模式 工廠模式 抽象工廠模式
建立物件時不會對客戶暴露建立邏輯,並且通過使用乙個共同的介面來指向建立的物件。sept1 建立乙個公共介面,將要對外開放的方法在這裡定義。sept2 建立實現介面的類,用即實現對外開放的類的方法 sept3 建立工廠,提供乙個get方法,這個方法提供返回實現類的物件 建立選擇 sept4 使用,建立...