- 爲什麼使用抽象工廠模式
在工廠方法模式一文中,我們看到,儘管可以通過工廠方法獲取所需要的類型的產品對象,但是如果類型增加了,則需要在生成對象的方法中增加邏輯判斷的分支,這很明顯違背的開閉原則 抽象工廠模式
爲了不對原有的代碼進行修改,又能夠在新增產品類型的時候,可以採用工廠方法獲得產品,於是我們對工廠類也作一次抽象,做一個抽象工廠類,所有的具體工廠都需要繼承自這個抽象工廠類。代碼示例
承接工廠方法模式一文的設計
做如下改動:
接口:Product
抽象類:AbstractFactory
類:ProductA、ProductB、FactoryA、FactoryB
/**
* 抽象的工廠類接口,所有具體工廠都需要實現這個接口
* @author yjzhou
*
*/
public interface AbstractFactory {
public Product getProduct();
}
* A類產品的工廠,只產生A類產品
* @author Lenovo
*
*/
public class FactoryA implements AbstractFactory {
@Override
public Product getProduct() {
return new ProductA("你好,我是A類產品!");
}
}
/**
* B類產品的工廠,只生產B類產品
* @author yjzhou
*
*/
public class FactoryB implements AbstractFactory {
@Override
public Product getProduct() {
return new ProductB("你好,我是B類產品");
}
}
/**
* 抽象工廠測試類
* @author yjzhou
*
*/
public class FactoryTest {
public static void main(String[] args) {
//獲取A類產品的工廠
AbstractFactory factory = new FactoryA();
//獲取A類產品
Product product = factory.getProduct();
//輸出產品信息
product.printName();
}
}
以上的設計,如果增加產品類C,ProductC,相應的再增加FactoryC,FactoryC繼承AbstractFatory類即可以實現程序的擴展,體現了開閉原則的內涵。