畢業兩年,碼農張小兩口沒法忍受擠公交,凌晨起牀搶火車票的痛苦,遂計劃買車。逛了多家4S店,最終定下日產某車型的轎車。4S店接受訂單後,向工廠說明車型,工廠隨後進行汽車製造,運輸到4S店中再到了小兩口的手上,小兩口終於成了有車一族。
仔細分析,4S銷售模式即爲典型的簡單工廠模式。下面從代碼的角度進行分析。html
首先,咱們先分析4S店最初的模式(企業我的做坊階段,無工廠)。4S店賣車首先要有車,這裏只取日產部分車型逍客,軒逸和天籟。java
代碼片斷1 日產車父類,全部車型都繼承此類。學習
/** * 日產車 * @author coderzcr */ abstract class NissanCar { String name; void printCar(){ System.out.println(name+"汽車已製造完成"); } }
代碼片斷2 車型:逍客this
/** * 車型:逍客 * @author coderzcr */ class Xtrail extends NissanCar { Xtrail(){ this.name = "逍客"; } }
代碼片斷3 車型:軒逸code
/** * 車型:軒逸 * @author coderzcr */ class Sylphy extends NissanCar { Sylphy(){ this.name = "軒逸"; } }
代碼片斷4 車型:天籟htm
/** * 車型:天籟 * @author coderzcr */ class Altima extends NissanCar { Altima(){ this.name="天籟"; } }
代碼片斷5 無工廠的4S店對象
/** * 4s店 * @author coderzcr */ class FourS { /** * 獲取汽車 * @param type 汽車型號 */ void getCar(String type) { NissanCar nissanCar = null; if ("1".equals(type)) { nissanCar = new Xtrail(); } else if ("2".equals(type)) { nissanCar = new Sylphy(); } else if ("3".equals(type)) { nissanCar = new Altima(); } assert nissanCar != null; nissanCar.printCar(); } }
圖片1 無工廠模式類圖
由上圖能夠發現blog
隨着企業的發展,企業認識到了問題的嚴重性,開始設立工廠。工廠負責製造汽車,4S店負責銷售汽車,只需告知工廠型號便可獲取汽車。繼承
代碼片斷6 汽車工廠接口
/** * 日產車工廠 * @author coderzcr */ public class NissanCarFactory { /** * 生產汽車 * @param type 汽車型號 */ NissanCar createCar(String type) { NissanCar nissanCar = null; if ("1".equals(type)) { nissanCar = new Xtrail(); } else if ("2".equals(type)) { nissanCar = new Sylphy(); } else if ("3".equals(type)) { nissanCar = new Altima(); } return nissanCar; } }
代碼片斷7 有工廠的4S店。
/** * 有工廠的4S店。 * * @author coderzcr */ class FourS { NissanCarFactory nissanCarFactory; FourS(NissanCarFactory nissanCarFactory) { this.nissanCarFactory = nissanCarFactory; } /** * 獲取汽車 * * @param type 汽車型號 */ void getCar(String type) { NissanCar nissanCar = nissanCarFactory.createCar(type); nissanCar.printCar(); } }
圖片2 有工廠模式類圖
通過改造,4S店和工廠的職責進行了分離,減輕了4S店的壓力。當發佈新車型時,只需瞭解其型號告知工廠便可獲取到相應車輛。
簡單工廠模式(Simple Factory Pattern):屬於類建立型模式。在簡單工廠模式中,能夠根據參數的不一樣返回不一樣類的實例。簡單工廠模式專門定義一個類來負責建立其餘類的實例,被建立的實例一般都具備共同的父類。
已上面舉例來解釋的話就是根據車型的不一樣製造不一樣型號的車。日產專門建造一個工廠來負責製造汽車,被創造的汽車都是日產車型。
簡單工廠模式包含以下角色:
圖片3 簡單工廠模式
將對象的建立和對象自己業務處理分離能夠下降系統的耦合度,使得二者修改起來都相對容易。
簡單工廠模式最大的問題在於工廠類的職責相對太重,增長新的產品須要修改工廠類的判斷邏輯,這一點與開閉原則是相違背的。
簡單工廠模式的要點在於:當你須要什麼,只須要傳入一個正確的參數,就能夠獲取你所須要的對象,而無須知道其建立細節。
1. 簡單工廠模式( Simple Factory Pattern ) — Graphic Design Patterns