我是一個相對較新的C++程序員。
在編寫一些代碼時,我在概念上創建了與下面的代碼類似的東西。當一個朋友指出這實際上是一個工廠模式,我讀到關於這個模式並且看到它是相似的。在C++中使用靜態方法來實現工廠模式
在我發現的所有例子中,工廠模式總是使用單獨的類實現,如class BaseFactory{...};
,而不是我使用靜態create()
成員函數實現的。
我的問題是:
(1)這實際上是工廠模式嗎? (2)代碼似乎工作。在我實施它的方式中有什麼不正確的嗎? (3)如果我的實現是正確的,那麼實現靜態create()
函數的優點和缺點是什麼,而不是單獨的BaseFactory
類。
謝謝!
class Base {
...
virtual ~Base() {}
static Base* create(bool type);
}
class Derived0 : public Base {
...
};
class Derived1 : public Base {
...
};
Base* Base::create(bool type) {
if(type == 0) {
return new Derived0();
}
else {
return new Derived1();
}
}
void foo(bool type) {
Base* pBase = Base::create(type);
pBase->doSomething();
}
不容易擴展,如果我想添加一個新的派生類型,我不得不修改原始工廠而不是創建一個新的工廠類。如果工廠生活在我無法控制的第三方庫中,那麼根本無法做到這一點。因此,通常的設計基於繼承。 – syam
@syam是抽象工廠,不是工廠 –
@BЈовић啊對。我想我從不使用「普通」工廠模式,因此我的困惑... – syam