### 工廠方法模式
定義一個用于創建對象的接口,讓子類決定實例化哪一個類。工廠方法使一個類的實例化延遲到其子類。(摘抄)
工廠方法模式和簡單工廠模式都是用于去創建新的類,但是工廠方法模式傳承了簡單工廠模式封裝對象創建的過程,同時也改掉了簡單工廠模式違背開放——封閉原則的缺點。
簡單工廠模式,如果需要生產/去掉一個子類的話,那么需要在SimpleFactory類中修改 switch case 語句,所以違背了開放——封閉原則。
工廠方法創建對象是通過子工廠來創建,所以添加或刪除子類的話是不需要改變原有的代碼的。
~~~
class Factory
{
public Product create() {
// TODO Auto-generated method stub
return null;
}
}
class AFactory extends Factory
{
public Product create() {
// TODO Auto-generated method stub
return new AProduct();
}
}
class BFactory extends Factory
{
public Product create() {
// TODO Auto-generated method stub
return new BProduct();
}
}
class Product
{
public void domethod() {
// TODO Auto-generated method stub
}
}
class AProduct extends Product
{
public void domethod() {
// TODO Auto-generated method stub
}
}
class BProduct extends Product
{
public void domethod() {
// TODO Auto-generated method stub
}
}
//新增類
class CFactory extends Factory
{
public Product create()
{
return new CProduct();
}
}
class CProduct extends Product
{
public void domethod()
{
}
}
public static void main()
{
Factory factory = new AFactory();
Product product = factory.create();
product.domethod();
//新增一個類的話,那么只需要添加,而不需要修改原有代碼,因為生產類的判斷交給了客戶端
factory = new CFactory();
Product newP = factory.create();
newP.domethod();
}
~~~
工廠方法模式差不多也就這樣,還是那句話實際使用中必須活學活用,多種模式結合出來的四不像模式,也許才是正確的使用方法。。。
話說《大話》的例子越來越扯了。。。感覺解釋還是蠻清楚,就是例子有點蛋疼,但是我也還蠻佩服作者,這樣子也可以圓過來。。。
好希望自己把這本書看完之后,可以去看下那本Gof寫的原版的設計模式,正好提升一下英文水平
- 前言
- (1)代碼無錯就是優?——簡單工廠模式
- (2)商場促銷——策略模式
- (3)&(4)&(5) 設計模式原則
- (6)穿什么有這么重要?——裝飾模式
- (7)為別人做嫁衣——代理模式
- (8)雷鋒依然在人間——工廠方法模式
- (9)簡歷復印——原型模式
- (10)考題抄錯會做也白搭——模板方法模式
- (11)迪米特法則
- (12)牛市股票還會虧錢?—— 外觀模式
- (13)好菜每回味不同——建造者模式
- (14)老板回來,我不知道——觀察者模式
- java實現事件委托
- (15)就不能不還DB嗎?—— 抽象工廠模式
- (16)無盡加班何時休息——狀態模式
- (17)在NBA我需要翻譯——適配器模式
- (18)如果再回到從前——備忘錄模式
- (19)分公司=部門——組合設計模式
- (20)想走?可以!先買票——迭代器模式
- (21)有些類也需計劃生育——單例模式
- (22)手機軟件何時統一——橋接模式
- (23)烤羊肉串引來的思考——命令模式
- (24)加薪非要老總批?——職責鏈模式
- (25)世界需要和平——中介者模式
- (26)項目多也別傻做——享元模式
- (28)男人和女人——訪問者模式