參照原文:設計模式之三種工廠模式
建立物件不再需要 new,我只需要將需要生產什麼東西告訴工廠,工廠就能生產出對應的物件例項
問題背景
大眾集團要生產汽車,但是不確定要生產哪幾個品牌的汽車
角色扮演
車: vwcar 類、audicar 類
工廠: factory 類
客戶端:需要去例項化車的人或者其它**
適用場景
要生產的產品的數目和型別未知的時候
實現
兩種車:vwcar audicar
class
car;
class
vwcar
:public car };
class
audicar
:public car
};
簡單工廠模式
//定義簡單工廠類
class
factory
};
客戶端
int
main()
執行結果
生產了一輛vwcar車
生產了一輛audicar車
此時假如我又想要生產保時捷,只需要增加生產保時捷的方法,並且給工廠新增一條生產線,就可以通過告知工廠我想要生產保時捷,來得到保時捷這輛車
#include
#include
//車class
car;
class
vwcar
:public car };
class
audicar
:public car };
class
porschecar
:public car };
//定義簡單工廠類
class
factory};
intmain()
問題背景
在簡單工廠模式中,如果我還要生賓利、布加迪,我不得不去修改簡單工廠類中的**,但是我並不想這樣做
角色扮演
車: vwcar 類、audicar 類
總工廠: factory 抽象類,或者介面也行
子工廠: vwca***ctory 類、 audica***ctory 類
客戶端:需要去例項化車的人或者其它**
使用場景
要生產的產品的數目和型別未知的時候
實現
兩種車:vwcar audicar
class
car;
class
vwcar
:public car };
class
audicar
:public car
};
總工廠
class
factory
;
子工廠
class
vwca***ctory
:public factory };
class
audica***ctory
:public factory
};
客戶端+測試
int
main()
可以看到,如果我生產了一輛 vwcar,不同於簡單工廠的是,這時是使用 vwca***ctory 去生產vwcar,煩人的條件語句沒有了。且作為客戶端,我不需要關心 vw->product(); 的具體實現,或者說不需要關心你這車怎麼生產的,你把車給我就好。
如果還需要生產保時捷,那麼新建乙個工廠即可,不用更改**,利用多型,消除了煩人的條件語句
class
porscheca***ctory
:public factory
};
優點
優點:相比於簡單工廠模式增加產品的時候只需要增加對應的類就可以,不用修改原來的**
用工廠發放模式我不得不為每一款車都建乙個工廠,但是這樣似乎划不來,我希望同一系列的車都由同乙個工廠來完成,例如奧迪車分為高階奧迪和低端奧迪,將來可能還會有中端、頂端等等…
無論是低端奧迪還是高階奧迪,都是奧迪車
角色扮演
低端車介面: lowendcar 類
車: vwlowendcar 類 (低端大眾)
總工廠: factory 抽象類
子工廠: vwca***ctory 類
客戶端:需要去例項化車的人或者其它**
實現
所有車的基類
class
car;
低端車的基類
class
lowendcar
:public car
;
低端大眾車
class
vwlowendcar
:public lowendcar
};
工廠
//總工廠
class
factory
;//子工廠
class
vwlowendca***ctroy
:public factory
};
客戶端+測試
int
main()
此時便可以新增高階車,新增奧迪車
#include
#include
class
car;
class
lowendcar
:public car
;class
highendcar
:public car
;//低端大眾和高階大眾
class
vwlowendcar
:public lowendcar };
class
vwhighendcar
:public highendcar };
//低端奧迪和高階奧迪
class
audilowendcar
:public lowendcar };
class
audihighendcar
:public highendcar };
//總工廠
class
factory
virtual car*
producthighendcar()
;};//生產大眾和奧迪的工廠,又分別能生產高階車和低端車
class
vwfactroy
:public factory
virtual car*
producthighendcar()
};class
audifactory
:public factory
virtual car*
producthighendcar()
};intmain()
詳解工廠模式
工廠模式是建立模式,主要是為建立物件提供過渡介面 以便將建立物件的具體過程遮蔽隔離起來,達到提高靈活性的目的。工廠模式在 深入淺出設計模式 和 大話設計模式 中分為三類 這三種模式從上到下逐步抽象,並且更具有一般性。我剛開始看著 大話設計模式 學習,抽象工廠還沒看到,所以這一篇就先記一下前兩種,後面...
工廠模式詳解
簡單工廠模式是由乙個工廠物件根據收到的訊息決定要建立哪乙個類的物件例項。工廠類負責建立的物件比較少,客戶只需要傳入工廠類引數,對於如何建立物件 邏輯 不關心。簡單工廠模式很容易違反高內聚低耦合的原則,因此一般只在很簡單的情況下使用。最大的優點在於工廠類中包含了必要的邏輯,根據客戶需要的邏輯動態例項化...
二 工廠模式詳解
從設計模式的型別上來說,簡單工廠模式是屬於建立型模式,又叫做靜態工廠方法 static factory method 模式,但不屬於23種gof設計模式之一。簡單工廠模式是由乙個工廠物件決定建立出哪一種產品類的例項。簡單工廠模式是工廠模式家族中最簡單實用的模式,可以理解為是不同工廠模式的乙個特殊實現...