現在的手機製造業,在高度的繁榮發展後,流水線的工作基礎,吸引了很多廠商爲了壓低成本,搞一些odm的手機,就是在一個模版的基礎上,改下殼,換個商標的樣子,就開發佈會,說有新的手機!大家快帶上你的錢來買,賣得好不好,純靠營銷能力啊。
例如下面的,某情懷和某米的手機,是不是很一樣啊?
改一改又是一部手機!
那麼,作爲工廠,應該怎麼搞呢?
代碼實現
我們設計出這個工廠的基本方法
public class PhoneFactory {
public static SmartPhone createSmartPhone(Class c){
SmartPhone phone=null;
try {
phone = (SmartPhone)Class.forName(c.getName()).newInstance();
} catch (InstantiationException e) {
System.out.println("必須指定手機牌子");
} catch (IllegalAccessException e) {
System.out.println("手機定義錯誤");
} catch (ClassNotFoundException e) {
System.out.println("沒這牌子手機");
}
return phone;
}
}
我們的工廠蓋好了,很簡單,就是造部手機出來!
public abstract class SmartPhone{
public abstract void showBrand();
public abstract void startUp();
public abstract void shutDown();
}
接着我們的工廠提供了一個公模,所有的基礎的模版,如果需要定製手機,就在這基礎上修改下,我們的智能手機當然啦,很智能,能開機,關機,展示品牌,厲害吧
現在時候來展示我們的手機了,我們的各個大品牌商要開發佈會,重新定義手機了,是的,重新定義手機,很牛逼哄哄的!!
先來下我們的革命級別的大米手機:
public class MiPhone extends SmartPhone{
@Override
public void showBrand() {
System.out.println(" 這個是大米手機");
}
@Override
public void startUp() {
System.out.println(" 大米手機正在開機");
}
@Override
public void shutDown() {
System.out.println("大米正在關機");
}
}
接着是我們的極具情懷的東半球可能是最厲害的大錘子手機
public class HammerPhone extends SmartPhone{
@Override
public void showBrand() {
System.out.println(" 這個是大錘子手機");
}
@Override
public void startUp() {
System.out.println(" 大錘子手機正在開機");
}
@Override
public void shutDown() {
System.out.println("大錘子正在關機");
}
}
有了這些基礎,我們的各種發佈會就可以如期舉行,只需要督促下我們各個工廠,叫他們加大馬力,趕緊生產,產不出來的我們就飢餓營銷下。
現在我們來看下,我們到底怎麼生產手機
public void main(String[] args) {
SmartPhone smartPhone=PhoneFactory.createSmartPhone(MiPhone.class);
smartPhone.startUp();
smartPhone.showBrand();
smartPhone.shutDown();
}
我們的智能手機就這樣生產出來了!是不是很好的感覺?
以後別的手機友商,如果需要生產新的手機,就繼承下,然後改下牌子名,就可以拿出去賣了,是不是很好!!!!!
另外如果要搞庫存,保留模版,可以弄一個靜態的存儲!
這樣初始化就能降低消耗了。
public static SmartPhone createSmartPhone(Class c) {
SmartPhone phone = null;
try {
if (storePhone.containsKey(c.getSimpleName())) {
phone = storePhone.get(c.getSimpleName());
} else {
phone = (SmartPhone) Class.forName(c.getName()).newInstance();
storePhone.put(c.getSimpleName(), phone);
}
} catch (InstantiationException e) {
System.out.println("必須指定手機牌子");
} catch (IllegalAccessException e) {
System.out.println("手機定義錯誤");
} catch (ClassNotFoundException e) {
System.out.println("沒這牌子手機");
}
return phone;
}
}
類圖
我們看下我們的工廠方法的類圖,是不是很靈活的樣子!
我們只需要修改傳遞過去的手機類型,就可以開始生產手機了!
後記
寫到這個鐘頭,都忘記好吃午飯了,寫完突然覺得好餓啊。。
前面的是簡單定製的案例,不過現實可能會需要點複雜的,高度定製的手機,例如那個高逼格的某果手機。曾經爲了加上藍玻璃屏幕,找了一家供應商,別人知道了這事,他股票大漲,但這家供應商的工藝跟不上,沒做出來他們需要的玻璃,結果股票大跌,倒閉了,哀傷的故事啊。
對於高度定製的工廠,我們也可以在原有的基礎上加點修改,從而達到想要的效果的。
那是抽象工廠方法模型,下次寫,歡迎關注。