概念
為建立一組相關或相互依賴的對象提供一個介面,而且無需指定他們的具體類
特點
抽象原廠模式(Abstact Factory)是一種常見的軟體設計模式,該模式為一個產品族提供了統一的建立介面。當需要這個產品族的某一系列的時候,可以為此系列的產品族建立一個具體的工廠類。
主要角色
抽象工廠(Abstract Factory)角色:它聲明一個建立抽象產品對象的介面。通常以介面或抽象類別實現,所有的具體工廠類必須實現這個介面或繼承這個類。
具體工廠(Concrete Factory)角色:實現建立產品對象的操作。用戶端直接調用這個角色建立產品的執行個體。這個角色包含有選擇合適的產品對象的邏輯。通常使用具體類實現。
抽象產品(Abstract Product)角色:聲明一類產品的介面。它是Factory 方法模式所建立的對象的父類,或它們共同擁有的介面。
具體產品(Concrete Product)角色:實現抽象產品角色所定義的介面,定義一個將被相應的具體工廠建立的產品對象。其內部包含了應用程式的商務邏輯。
優缺點
抽象原廠模式的優點:
1、分離了具體的類
2、使增加或替換產品族變得容易
3、有利於產品的一致性
抽象原廠模式的缺點:
難以支援新種類的產品。這是因為AbstractFactory介面確定了可以被建立的產品集合。支援新各類的產品就需要擴充訪工廠介面,從而導致AbstractFactory類及其所有子類的改變。
抽象工廠就是以一種傾斜的方式支援增加新的產品中,它為新產品族的增加提供了方便,而不能為新的產品等級結構的增加提供這樣的方便。
適用性
1、一個系統不應當依賴於產品類執行個體如何被建立、組合和表達的細節,這對於所有形態的原廠模式都是重要的。
2、這個系統的產品有多於一個的產品族,而系統只消費其中某一族的產品。
3、 同屬於同一個產品族的產品是在一起使用的,這一約束必須在系統的設計中體現出來。
4、系統提供一個產品類的庫,所有的產品以同樣的介面出現,從而使用用戶端不依賴於實現
抽象原廠模式執行個體
createCat(); $cat->Voice(); $dog = $AnimalFactory->createDog(); $dog->Voice(); }}Client::main();?>