設計模式系列-工廠模式
積千里跬步,匯萬裡江河.每天進步一點點,終有一天將成大佬
前言
工廠模式有以下三種
- 簡單工廠模式
- 工廠方法模式
- 抽象工廠模式
其中簡單工廠模式不在23中模式之中,更多的是一種程式設計習慣,而我們平常所說的工廠模式一般指的是工廠方法模式,抽象工廠在實際的業務開發中也用的比較少,因為它有時候違背了開閉原則.由於篇幅有限,抽象工廠本文就不講了,以後單獨講;
簡單工廠模式
簡單工廠到底有多簡單呢?簡單到只有一個工廠,這個工廠相當於是萬能工廠,你想要什麼,只要和它說一聲,它就會想方設法的去抱你建立,然後給你;舉個買車的簡單的例子:
當我要買車的時候,我選了這兩種車.
/**
* 建立一個汽車介面
* */
public interface Car {
/**
* 汽車能動
* */
void run();
}
複製程式碼
/**
* 賓士車
* */
class Benz implements @Override
public run() {
System.out.println("大奔開動了");
}
}
複製程式碼
/**
* 五菱神車
* */
Wuling "五菱神車開動了");
}
}
複製程式碼
選是選好了,可是要怎麼得到呢?是不是下意識的new一個出來?
//我要賓士車
Benz myCar=new Benz();
複製程式碼
如果是這樣的話,就相當於自己親手造了一輛賓士車出來,因為是你自己new
這種事情當然是交給工廠去做嘛,叫工廠去new就可以了,我只要交錢給工廠就可以了.誒,有錢真好!
/**
* 汽車工廠
*
* 靜態工廠
*
* 簡單工廠
* */
CarFactory {
static Car getCar(String type){
if("我要五菱神車".equals(type)){
return new Wuling();
}
if ("我要大賓士".equals(type)){
new Benz();
}
null;
}
}
複製程式碼
找到了這個工廠之後,我只要直接告訴它我要什麼車就可以了,工廠就會幫我造好給我;
/**
* 買車
* */
CostumerMain {
static main(String[] args) {
//跟車廠說一聲我要五菱神車
Car wuling=CarFactory.getCar("我要五菱神車");
//跟車廠說一聲我要大賓士
Car Benz=CarFactory.getCar("我要大賓士");
//開著五菱神車去兜兜風
wuling.run();
//開著大奔去兜兜風
Benz.run();
}
}
//五菱神車開動了
//大奔開動了
複製程式碼
這樣子,買車就結束了,果然錢可以解決一切,哈哈,開個玩笑~
工廠方法模式
上次買了兩輛車之後,白天開著大奔去街上撩妹,晚上開著五菱神車去秋名山飆車,從此走向了人生巔峰.可是好景不長,大奔開著開著就漏油了,五菱神車終於也翻車了.
找到了上次買車的工廠,準備換個低調點的勞斯萊斯.可是那家工廠竟然告訴我說他們那邊還沒有造過勞斯萊斯,需要改造一下工廠,然後才能生產勞斯萊斯,叫我等他們改造好之後再來買.聽他們這麼說後,我心想,我這分分鐘幾百萬上下的人,時間就是金錢.我可等不了.
於是幾番尋找之後,發現英國有個勞斯萊斯車場,專門來生產勞斯萊斯.於是和接待我的中介小姐姐聊了一下,發現他們的生產模式是這樣的:
/**
* 他們有個汽車工廠總部,用來定義車廠該幹什麼
* */
AllCarFactory {
/**
* 生產汽車
*/
Car getCar();
}
複製程式碼
/**
* 有個汽車規則,用來定義汽車能幹什麼
*/
/**
* 汽車能跑
*/
/**
* 勞斯萊斯汽車
* */
RollsRoyce /**
* 勞斯萊斯能跑起來
*/
"勞斯萊斯開起來了!!");
}
}
複製程式碼
/**
* 勞斯萊斯汽車工廠
* */
RollsRoyceFactory /**
* 生產一輛勞斯萊斯
*/
public Car getCar() {
new RollsRoyce();
}
}
複製程式碼
找到車廠後,我毫不猶豫和接待我的小姐姐說給我來一輛,小姐姐見我這麼豪爽,準備再忽悠我買幾輛車,不推薦我幾輛車....她知道我之前買了賓士和五菱神車,和我說他們這邊還有還有五菱車廠和賓士車廠,都是專門用來造同一種車的.於是我就去參觀了一下:
/**
* 五菱神車
*/
/**
* 五菱神車能飆車
*/
"五菱神車開動了");
}
}
複製程式碼
/**
* 五菱神車工廠
* */
WulingFactory /**
* 生產一輛五菱神車
*/
new Wuling();
}
}
複製程式碼
再去看看賓士車廠:
/**
* 賓士汽車
*/
/**
* 賓士汽車能跑
*/
/**
* 賓士汽車工廠
* */
BenzFactory /**
* 生產一輛賓士汽車
*/
new Benz();
}
}
複製程式碼
看完之後,感覺還可以,於是分別到三個工廠買了三輛車,然後高高興興的回家了:
看看我買車的過程:
/**
* 土豪買車記
* */
//去五菱車廠買車
Car wuling=new WulingFactory().getCar();
//去賓士車廠買車
Car benz=new BenzFactory().getCar();
//去勞斯萊斯車廠買車
Car rollsRoyce=new RollsRoyceFactory().getCar();
//開著三輛車去兜兜風
wuling.run();
benz.run();
rollsRoyce.run();
}
}
//大奔開動了
//勞斯萊斯開起來了!!
複製程式碼
總結
買完車後,小姐姐還和我說他們這樣的模式生產車的話有好多好處,比如一個車廠只要負責一種車的生產和售後,這樣的話,生產效率就會比較高,賺的錢自然也多,同時每個車廠還可以舉行不同活動,來吸引消費者,同時,你如果哪個品牌的車出現了問題了,直接去那輛車的工廠,基本上都能幫你解決問題,畢竟術業有專攻,對比前一個工廠什麼都造的萬金油來說,深入一項技術比什麼技術都懂好;
不過有時候,萬金油工廠也挺好的,就是一站式服務,你要什麼它都有,不用到處亂跑,省心省力.所以還是要根據什麼行業來執行什麼模式,這樣才能利益最大化;