与抽象工厂最搭大的区别:
工厂方法模式只有一个抽象产品类,而抽象工厂模式有多个。工厂方法模式的具体工厂类只能创建一个具体产品类的实例,而抽象工厂模式可以创建多个。
优点:
1、抽象工厂模式隔离了具体类的生产,使得客户并不需要知道什么被创建。
2、当一个产品族中的多个对象被设计成一起工作时,它能保证客户端始终只使用同一个产品族中的对象。
3、增加新的具体工厂和产品族很方便,无须修改已有系统,符合“开闭原则”。
缺点:
增加新的产品等级结构很复杂,需要修改抽象工厂和所有的具体工厂类,对“开闭原则”的支持呈现倾斜性。
#include <iostream>
using namespace std;
class SingleCore{
public:
virtual void show() = 0;
};
class SingleCoreA :public SingleCore{
public:
void show(){ cout << "SingleCoreA" << endl; };
};
class SingleCoreB :public SingleCore{
public:
void show(){ cout << "SingleCoreB" << endl; };
};
class MuiltCore{
public:
virtual void show() = 0;
};
class MuiltCoreA :public MuiltCore{
public:
void show(){ cout << "MuiltCoreA" << endl; };
};
class MuiltCoreB :public MuiltCore{
public:
void show(){ cout << "MuiltCoreB" << endl; };
};
class Factory{
public:
virtual SingleCore* createSingleCore() = 0;
virtual MuiltCore* createMuiltCore() = 0;
};
class FactoryA :public Factory{
public:
SingleCore* createSingleCore(){ return new SingleCoreA; }
MuiltCore* createMuiltCore(){ return new MuiltCoreA; };
};
class FactoryB :public Factory{
public:
SingleCore* createSingleCore(){ return new SingleCoreB; }
MuiltCore* createMuiltCore(){ return new MuiltCoreB; }
};
int main()
{
FactoryA factorya;
FactoryB factoryb;
SingleCore* singlecoreA = factorya.createSingleCore();
MuiltCore* muiltcoreA = factorya.createMuiltCore();
SingleCore* singlecoreB = factoryb.createSingleCore();
MuiltCore* muiltcoreB = factoryb.createMuiltCore();
singlecoreA->show();
muiltcoreA->show();
singlecoreB->show();
muiltcoreA->show();
system("pause");
}