抽象工廠模式(Abstract Factory Pattern)
爲創建一組相關或相互依賴的對象提供一個接口,並且無需指定它們的具體類。
抽象工廠模式是工廠方法模式的升級版本,在有多個業務品種,業務分類時,通過抽象工廠模式產生需要的對象是一種非常好的解決辦法。
假設一家汽車工廠生產兩種車型,A和B,工廠有兩條工藝線,分別生產發動機和車燈,代碼如下:
<pre name="code" class="java">public abstract class AbstractProductA{//車型A
public abstract void method();//生產
}
//A車型發動機實現類
public class ProductA1 extends AbstractProductA{
public void method(){}
}
//A車型車燈實現類
public class ProductA2 extends AbstractProductA{
public void method(){}
}
//車型B
public abstract class AbstractProductB{
public abstract void method();
}
//B車型發動機實現類
public class ProductB1 extends AbstractProductB{
public void method(){}
}
//B車型車燈實現類
public class ProductB2 extends AbstractProductB{
public void method(){}
}
//抽象工廠類
public abstract class AbstractFactory{
public abstract AbstractProductA createProductA();
public abstract AbstractProductB createProductB();
}
//發動機生產線
public class Factory1 extends AbstractFactory{
public AbstractProductA createProductA(){
return new ProductA1();
}
public AbstractProductB createProductB(){
return new ProductB1();
}
}
//車燈生產線
public class Factory2 extends AbstractFactory{
public AbstractProductA createProductA(){
return new ProductA2();
}
public AbstractProductB createProductB(){
return new ProductB2();
}
}
抽象工廠模式使得每個產品的實現類與高層模塊解耦,具有良好封裝性。
不過抽象工廠模式擴展產品族極其困難,比如上述環境如果需要生產新的車型C,則需要修改極多代碼,違反開閉原則。不過產品等級擴展容易,比如如果需要生產車的新的部件,則只需增加相關實現類即可。