如果要擴充套件的話,則要修改源**,這樣如果以後產生的phone型別很多,那麼就要一直修改,**維護成本高(如果萬一你哪個型別寫錯了怎麼辦)
所以出現了工廠模式。
工廠模式簡單來說就是乙個工廠對應乙個產品。比如說iphonefactory產生iphone系列的手機,xiaomifactory產生xiaomi系列的手機。
讓我們看看uml圖吧。
看下**吧
首先是phone介面
package edu.fjnu.cs.hwb.factory;
public inte***ce phone
然後是具體的實現類
首先是iphone4的
package edu.fjnu.cs.hwb.factory;
import edu.fjnu.cs.hwb.factory.*;
public class iphone4 implements phone
}
之後是iphone4s的
package edu.fjnu.cs.hwb.factory;
import edu.fjnu.cs.hwb.factory.*;
public class iphone4s implements phone
}
之後是xiaomi2的
package edu.fjnu.cs.hwb.factory;
import edu.fjnu.cs.hwb.factory.*;
public class xiaomi2 implements phone
}
之後是xiaomi2s的
package edu.fjnu.cs.hwb.factory;
import edu.fjnu.cs.hwb.factory.*;
public class xiaomi2s implements phone
}
好了,現在看看工廠吧
首先是工廠介面
package edu.fjnu.cs.hwb.factory;
//定義工廠介面
public inte***ce phonefactory
在看看對應的工廠
首先是iphone的工廠
package edu.fjnu.cs.hwb.factory;
public class iphonefactory implements phonefactory
else if(name.equalsignorecase("iphone4s"))
else
return phone;
}}
之後是xiaomi工廠
package edu.fjnu.cs.hwb.factory;
public class xiaomifactory implements phonefactory
else if(name.equalsignorecase("xiaomi2s"))
else
return phone;
}}
在看看客戶端怎麼使用
package edu.fjnu.cs.hwb.factory;
/*** * 工廠模式:
* 抽象出乙個工廠,還有手機類
* 分門別類的為每個手機做乙個工廠,該工廠專門為某個手機服務
*/public class client
catch(exception ex)
}}
結果
總結一下:工廠模式比簡單工廠好一點,至少它容易擴充套件了。但是如果有多個產品的話,那麼不就意味這要弄多個工廠?(假設我們現在需要computer,那就意味著還要寫多個工廠),所以就會出現了抽象工廠設計模式,抽象工廠就是要針對產品族的!
下次再講抽象工廠。
如果有講不對的,請指出來。
每日設計模式 工廠模式之三(抽象工廠模式)
抽象工廠又叫做工廠的工廠。從某個角度來說抽象工廠是工廠方法模式的公升級版。工廠方法模式相對簡單,只負責某一類產品的建立工作,而工廠方法模式很強大,能建立很多的產品,從這個角度來說抽象工廠模式確實是工廠方法模式的公升級。但是,從職能和應用場景上來看,不應該將抽象工廠看成是工廠方法模式的公升級版。工廠方...
設計模式之(三) 工廠方法模式
女媧補天的故事大家都聽過吧,這個故事是說,女媧在補了天後,下到凡間一看,哇塞,風景太優美了,天空是湛 藍的,水是清澈的,空氣是清新的,太美麗了,然後就待時間長了就有點寂寞了,沒有動物,這些看的到 都是靜態的東西呀,怎麼辦?別忘了是神仙呀,沒有辦不到的事情,於是女媧就架起了八卦爐 技術術語 建立工廠 ...
探索設計模式之三 抽象工廠模式
前面介紹的 簡單工廠模式 和 工廠方法模式 立足點都是避免顯式的建立具體物件,封裝建立物件時可能出現的變化點,這已經能比較好的解決單個物件建立的問題,但實際業務中,還經常出現需要一系列物件互相關聯使用來完成任務的情況。對於存在關聯 以來的產品來說,使用簡單工廠或者工廠方法乙個乙個的建立其中的具體產品...