抽象工廠模式(Abstract Factory)
抽象出來一個基礎接口定義了產品功能(對應抽象產品角色),每個實現此接口的子類就是具體產品(對應具體產品角色),然後定義一個工廠接口(對應抽象工廠角色),實現了工廠接口的子類就是具體工廠(對應具體工廠角色),這時候,接口編程的優點就體現了,我們可以隨時新增具體產品類(只需要實現產品接口),只需要同時新增一個工廠類,客戶端就可以輕鬆調用生成新產品的代碼。
抽象工廠模式的靈活性就體現在這裏,無需改動原有的代碼,畢竟對於客戶端來說,靜態工廠模式在不改動StaticFactory類的代碼時無法新增產品,如果採用了抽象工廠模式,就可以輕鬆的新增拓展類。
抽象工廠模式的用意爲:給客戶端提供一個統一接口,可以創建多個複雜產品族中的產品對象
抽象工廠角色: 這是抽象工廠模式的核心,它與應用程序無關。是具體工廠角色必須實現的接口或者必須繼承的父類。在java中它由抽象類或者接口來實現。
具體工廠角色:它含有和具體業務邏輯有關的代碼。由應用程序調用以創建對應的具體產品的對象。它由具體的類來實現。
抽象產品角色:它是具體產品繼承的父類或者是實現的接口。在java中一般由抽象類或者接口來實現。
具體產品角色:具體工廠角色所創建的對象就是此角色的實例。在java中由具體的類來實現
interface food { }
class A implements food{}
class B implements food{}
interface AbstractFactory { Food produceFood();}
class FactoryA implements AbstractFactory {
@Override
public Food produceFood() {
return new A();
}
}
class FactoryB implements AbstractFactory {
@Override
public Food produceFood() {
return new B();
}
}
客戶端調用
public class Client{
public Food getFood(String name){
Food x= new FactoryA().produceFood();
return x;
}
}