工廠模式,實例化對象,用工廠方法代替new操作。
工廠模式基本與簡單工廠模式差不多,簡單工廠中每次添加一個子類必須在工廠類中添加一個判斷分支,這違背了開閉原則。而工廠模式的解決方法是將簡單工廠中的每個判斷都生成一個工廠子類,工廠子類位於工廠類抽象和產品類實現之間,實際依然屬於實現。工廠類中的爲抽象的接口,開閉原則要不修改接口,只修改實現,則這裏工廠子類是實現,添加工廠子類及其代碼沒有修改抽象的接口,即達到了開閉原則。
缺點是產品多了之後,要維護的量就增加了,會出現許多工廠子類,雖然工廠子類只進行創建產品的工作。沒增加一個產品就要增加一個工廠子類,增加工作量。
工廠模式只是簡單工廠的一點優化,使其遵循了開閉原則。應用場景也與簡單工廠一樣,在子類數量不多的情況下。
工廠模式的簡單實現:
class bass{
public:
virtual void fun() = 0;
bass(){}
virtual ~bass(){}
};
class A : public bass{
public:
virtual void fun(){cout<< "A"<<endl;}
A(){}
virtual ~A(){}
};
class B : public bass{
public:
virtual void fun(){cout<< "B"<<endl;}
B(){}
virtual ~B(){}
};
class AbstractFactory{
public:
AbstractFactory(){};
virtual ~AbstractFactory();
virtual bass* createProduct() = 0;
};
class FactoryA:public AbstractFactory{
FactoryA(){}
~FactoryA(){}
A* createProduct(){return new A();}
};
class FactoryB:public AbstractFactory{
public:
FactoryB(){}
~FactoryB(){}
B* createProduct(){return new B();}
};