設計模式-工廠模式二(工廠方法模式)

基于第一章的簡單工廠模式 我們會發(fā)現這個簡單工廠有很大的限制。從現實生活上來看,太不專業(yè)了,你一個簡單工廠可以創(chuàng)造任何牌子的牛奶。這在實際上也是行不通的。除非類似于拼夕夕那里的產品工廠。在真正的實際中,不同品牌的牛奶因為具體的制作工藝其他的相關原料等問題肯定不會是一個工廠來制造。

舉個栗子

/**

* 工廠方法的本源,工廠接口

*奶企的常規(guī)操作,生成牛奶

*/

public interface IMilkFactory {
        IMilkcreateMilk();
}

蒙牛、伊利、三元分別有自己的工廠來實現生產牛奶的功能

public class MengniuFactoryimplements IMilkFactory {

    @Override
    public IMilkcreateMilk() {
      return new MengniuMilk();
    }
}

public class SanYuanFactoryimplements IMilkFactory {

    @Override
    public IMilkcreateMilk() {
      return new SanYuanMilk();
    }
}

public class YiLiFactoryimplements IMilkFactory {

    @Override
    public IMilkcreateMilk() {
      return new YiLiMilk();
    }
}

三個工廠已經創(chuàng)建完畢,并且已經實現了生成各自牛奶的功能

我們的具體測試類如下

public class FuncFactoryTest {

public static void main(String[] args) {
        IMilk mengNiu =new MengniuFactory().createMilk();
        IMilk yiLi =new YiLiFactory().createMilk();
        IMilk sanYuan =new SanYuanFactory().createMilk();
        System.out.println(mengNiu.createMilk());
        System.out.println(yiLi.createMilk());
        System.out.println(sanYuan.createMilk());
    }
}

類圖如下:

image

特點
在以上實例里,通過定義一個抽象的核心工廠類,并定義創(chuàng)建產品對象的接口,創(chuàng)建具體產品實例的工作延遲到其工廠子類去完成。這樣做的好處是核心類只關注工廠類的接口定義,而具體的產品實例交給具體的工廠子類去創(chuàng)建。當系統(tǒng)需要新增一個產品是,無需修改現有系統(tǒng)代碼,只需要添加一個具體產品類和其對應的工廠子類,使系統(tǒng)的擴展性變得很好,符合面向對象編程的開閉原則。在工廠方法模式中,核心的工廠類不再負責所有產品的創(chuàng)建,而是將具體創(chuàng)建工作交給子類去做。這個核心類僅僅負責給出具體工廠必須實現的接口,而不負責產品類被實例化這種細節(jié),這使得工廠方法模式可以允許系統(tǒng)在不修改工廠角色的情況下引進新產品。

缺點
我們的客戶端自己來實現具體的工廠創(chuàng)建。假如某個具體產品類需要進行一定的修改,很可能需要修改對應的工廠類。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 設計模式匯總 一、基礎知識 1. 設計模式概述 定義:設計模式(Design Pattern)是一套被反復使用、多...
    MinoyJet閱讀 4,093評論 1 15
  • 參考資料:菜鳥教程之設計模式 設計模式概述 設計模式(Design pattern)代表了最佳的實踐,通常被有經驗...
    Steven1997閱讀 1,272評論 1 12
  • 簡單工廠模式雖然簡單,但存在一個很嚴重的問題。當系統(tǒng)中需要引入新產品時,由于靜態(tài)工廠方法通過所傳入參數的不同來創(chuàng)建...
    justCode_閱讀 1,307評論 1 9
  • 設計原則: 要依賴抽象,不要依賴具體類 目錄 本文的結構如下: 什么是工廠方法模式 為什么要用該模式 模式的結構 ...
    w1992wishes閱讀 1,429評論 0 6
  • 冬天的早上,我們把自己的桌椅搬到操場上,我們沐浴在早晨溫暖的陽光中考試。
    藤木同學閱讀 184評論 0 0

友情鏈接更多精彩內容