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

abcjob發表於2021-09-09

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

舉個例子

/**

* 工廠方法的本源,工廠介面

*奶企的常規操作,生成牛奶

*/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();
    }
}

三個工廠已經建立完畢,並且已經實現了生成各自牛奶的功能

我們的具體測試類如下

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



在以上例項裡,透過定義一個抽象的核心工廠類,並定義建立產品物件的介面,建立具體產品例項的工作延遲到其工廠子類去完成。這樣做的好處是核心類只關注工廠類的介面定義,而具體的產品例項交給具體的工廠子類去建立。當系統需要新增一個產品是,無需修改現有系統程式碼,只需要新增一個具體產品類和其對應的工廠子類,使系統的擴充套件性變得很好,符合物件導向程式設計的開閉原則。在工廠方法模式中,核心的工廠類不再負責所有產品的建立,而是將具體建立工作交給子類去做。這個核心類僅僅負責給出具體工廠必須實現的介面,而不負責產品類被例項化這種細節,這使得工廠方法模式可以允許系統在不修改工廠角色的情況下引進新產品。



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



作者:YannisChen_2017
連結:


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4798/viewspace-2816022/,如需轉載,請註明出處,否則將追究法律責任。

相關文章