大白話簡單工廠模式 (Simple Factory Pattern)
從買車經歷說起
畢業兩年,碼農張小兩口無法忍受擠公交,凌晨起床搶火車票的痛苦,遂計劃買車,逛了多家4S店,最終定下日產某車型的轎車,4S店接受訂單后,向工廠說明車型,工廠隨后進行汽車制造,運輸到4S店中再到了小兩口的手上,小兩口終于成了有車一族,
仔細分析,4S銷售模式即為典型的簡單工廠模式,下面從代碼的角度進行分析,
無工廠模式
首先,我們先分析4S店最初的模式(企業個人作坊階段,無工廠),4S店賣車首先要有車,這里只取日產部分車型逍客,軒逸和天籟,
代碼片段1 日產車父類,所有車型都繼承此類,
/**
* 日產車
* @author coderzcr
*/
abstract class NissanCar {
String name;
void printCar(){
System.out.println(name+"汽車已制造完成");
}
}
代碼片段2 車型:逍客
/**
* 車型:逍客
* @author coderzcr
*/
class Xtrail extends NissanCar {
Xtrail(){
this.name = "逍客";
}
}
代碼片段3 車型:軒逸
/**
* 車型:軒逸
* @author coderzcr
*/
class Sylphy extends NissanCar {
Sylphy(){
this.name = "軒逸";
}
}
代碼片段4 車型:天籟
/**
* 車型:天籟
* @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 無工廠模式類圖

由上圖可以發現
- 4S店職責過多,不僅需要銷售,還需要制造汽車,明白如何生產某型號的汽車,
- 耦合嚴重,如果需要發布新的車型,還需要對4S進行修改(即學習更多的車型制造),無疑增大了4S店的壓力,
隨著企業的發展,企業認識到了問題的嚴重性,開始設立工廠,工廠負責制造汽車,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):屬于類創建型模式,在簡單工廠模式中,可以根據引數的不同回傳不同類的實體,簡單工廠模式專門定義一個類來負責創建其他類的實體,被創建的實體通常都具有共同的父類,
已上面舉例來解釋的話就是根據車型的不同制造不同型號的車,日產專門建造一個工廠來負責制造汽車,被創造的汽車都是日產車型,
簡單工廠模式結構
簡單工廠模式包含如下角色:
- Factory:工廠角色
工廠角色負責實作創建所有實體的內部邏輯,例子中得日產工廠(NissanFactory) - Product:抽象產品角色
抽象產品角色是所創建的所有物件的父類,負責描述所有實體所共有的公共介面,例子中的日車車(NissanCar) - ConcreteProduct:具體產品角色
具體產品角色是創建目標,所有創建的物件都充當這個角色的某個具體類的實體,例子中的逍客,軒逸,天籟,(Xtrail、Sylphy、Altima)
圖片3 簡單工廠模式

簡單工廠模式分析
將物件的創建和物件本身業務處理分離可以降低系統的耦合度,使得兩者修改起來都相對容易,
簡單工廠模式最大的問題在于工廠類的職責相對過重,增加新的產品需要修改工廠類的判斷邏輯,這一點與開閉原則是相違背的,
簡單工廠模式的要點在于:當你需要什么,只需要傳入一個正確的引數,就可以獲取你所需要的物件,而無須知道其創建細節,
參考文獻
1. 簡單工廠模式( Simple Factory Pattern ) — Graphic Design Patterns
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/32503.html
標籤:設計模式
上一篇:抽象工廠模式
下一篇:Provider模式應用demo
