大白話簡單工廠模式(Simple Factory Pattern)中經過買車的經歷解釋了簡單工廠模式。但熟悉設計模式的朋友會發現一些問題。java
因此,隨着企業的發展,日產公司決定將每種車型進行分工廠製造,解決了上述問題。這種方法在設計模式中被稱爲工廠方法模式設計模式
下面咱們從代碼的角度進行分析。4S店賣車首先要有車,這裏只取日產部分車型逍客,軒逸和天籟。
代碼片斷1 日產車父類,全部車型都繼承此類。ide
/** * 日產車 * @author coderzcr */ abstract class NissanCar { String name; void printCar(){ System.out.println(name+"汽車已製造完成"); } }
代碼片斷2 車型:逍客學習
/** * 車型:逍客 * @author coderzcr */ class Xtrail extends NissanCar { Xtrail(){ this.name = "逍客"; } }
代碼片斷3 車型:軒逸this
/** * 車型:軒逸 * @author coderzcr */ class Sylphy extends NissanCar { Sylphy(){ this.name = "軒逸"; } }
代碼片斷4 車型:天籟設計
/** * 車型:天籟 * @author coderzcr */ class Altima extends NissanCar { Altima(){ this.name="天籟"; } }
有了具體的車型要求,咱們須要對不一樣車型創建工廠。
代碼片斷5 日產工廠父類,全部工廠都繼承此類。code
/** * 日產車工廠 * @author coderzcr */ public abstract class NissanCarFactory { /** * 生產汽車 */ abstract NissanCar createCar() ; }
代碼片斷6 天籟工廠。htm
/** * 天籟工廠 * @author coderzcr */ public class AltimaFactory extends NissanCarFactory { @Override NissanCar createCar() { return new Altima(); } }
代碼片斷7 逍客工廠。對象
/** * 逍客工廠 * @author coderzcr */ public class XtrailFactory extends NissanCarFactory { @Override NissanCar createCar() { return new Xtrail(); } }
代碼片斷8 軒逸工廠。
/** * 軒逸工廠 * @author coderzcr */ public class SylphyFactory extends NissanCarFactory { @Override NissanCar createCar() { return new Sylphy(); } }
圖1 多工廠類圖
工廠方法模式(Factory Method Pattern)又稱爲工廠模式,也叫虛擬構造器(Virtual Constructor)模式或者多態工廠(Polymorphic Factory)模式,它屬於類建立型模式。在工廠方法模式中,工廠父類負責定義建立產品對象的公共接口,而工廠子類則負責生成具體的產品對象,這樣作的目的是將產品類的實例化操做延遲到工廠子類中完成,即經過工廠子類來肯定究竟應該實例化哪個具體產品類。
工廠父類(日產車工廠)
工廠子類(軒逸工廠、天籟工廠、逍客工廠)
即產品的製造分配給子工廠,緩解單一工廠的壓力。
圖2 工廠方法模式結構
工廠方法模式包含以下角色:
添加新產品時,須要添加一個具體工廠和具體產品,在必定程度上增長了系統的複雜度,有更多的類須要編譯和運行,會給系統帶來一些額外的開銷。