Java設計模式(三)工廠方法模式

介紹

工廠方法模式Factory Method,又稱多態性工廠模式。在工廠方法模式中,核心的工廠類不再負責所有的產品的創建,而是將具體創建的工作交給子類去做。

該核心類成爲一個抽象工廠角色,僅負責給出具體工廠子類必須實現的接口,而不接觸哪一個產品類應當被實例化這種細節。
在這裏插入圖片描述

代碼實現

工廠

// 創建一個抽象工廠角色
public interface MethodFactory {
    GoodsM createGoods();
}

// 創建具體的工廠1(生產蘋果)
public class AppleFactory implements MethodFactory {
    @Override
    public GoodsM createGoods() {
        return new AppleM();
    }
}

// 創建具體的工廠2(生產香蕉)
public class BananaFactory implements MethodFactory {
    @Override
    public GoodsM createGoods() {
        return new BananaM();
    }
}

產品

// 產品1(蘋果)
public class AppleM implements GoodsM {
    @Override
    public void goodsInfo() {
        System.out.println("工廠方法模式...生產了...apple...");
    }
}

// 產品2(香蕉)
public class BananaM implements GoodsM {
    @Override
    public void goodsInfo() {
        System.out.println("工廠方法模式...生產了...banana...");
    }
}

工廠方法的優缺點

優點

  1. 工廠方法模式把具體產品的創建推遲到工廠類的子類(具體工廠)中,此時工廠類不再負責所有產品的創建,而只是給出具體工廠必須實現的接口,這樣工廠方法模式在添加新產品的時候就不修改工廠類邏輯而是添加新的工廠子類,符合開放封閉原則
  2. 更符合開-閉原則,新增一種產品時,只需要增加相應的具體產品類和相應的工廠子類即可
  3. 符合單一職責原則,每個具體工廠類只負責創建對應的產品
  4. 工廠模式可以說是簡單工廠模式的進一步抽象和拓展,在保留了簡單工廠的封裝優點的同時,讓擴展變得簡單,讓繼承變得可行,增加了多態性的體現。

缺點

  1. 添加新產品時,除了增加新產品類外,還要提供與之對應的具體工廠類,系統類的個數將成對增加,在一定程度上增加了系統的複雜度;同時,有更多的類需要編譯和運行,會給系統帶來一些額外的開銷;
  2. 雖然保證了工廠方法內的對修改關閉,但對於使用工廠方法的類,如果要更換另外一種產品,仍然需要修改實例化的具體工廠類;
  3. 一個具體工廠只能創建一種具體產品

應用場景

  1. 當一個類不知道它所需要的對象的類時,在工廠方法模式中,客戶端不需要知道具體產品類的類名,只需要知道所對應的工廠即可;
  2. 當一個類希望通過其子類來指定創建對象時,在工廠方法模式中,對於抽象工廠類只需要提供一個創建產品的接口,而由其子類來確定具體要創建的對象,利用面向對象的多態性和里氏代換原則,在程序運行時,子類對象將覆蓋父類對象,從而使得系統更容易擴展。
  3. 將創建對象的任務委託給多個工廠子類中的某一個,客戶端在使用時可以無須關心是哪一個工廠子類創建產品子類,需要時再動態指定,可將具體工廠類的類名存儲在配置文件或數據庫中。

工廠設計模式

Java設計模式(二)簡單工廠模式—設計模式六大原則
Java設計模式(四)抽象工廠模式

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章