特点:核心思想是封装类中不变的部分,提取其中变化较大的部分为独立类,比如添加新的产品就没有必要改变工厂类。直接添加工厂子类,符合了“高内聚,低耦合”的程序设计思想。
优点:客户不需要在创建产品时提供具体的产品信息,使对外接口更加安全,封装性更强。使模式的灵活性更强。
缺点:每增加一个产品,相应的要增加一个子工厂,加大了额外的开发量。
适用场景:1.对于某个产品调用者知道使用哪一个具体的工厂生产,实例化该工厂,进而生产出具体的产品。(其实这里可以 理解为调用者知道具体的工厂也是接口的对外暴露,和简单工厂模式的类似,不过喃,工厂方法增加了“高内聚”)
2.将实例化的过程推迟到子类中,由子类决定实例化哪个。
3.频繁添加产品
UML:
代码:
/*工厂模式方法*/
#include<iostream>
using namespace std;
enum productType{COREA,COREB};
class SingleCore{
public:
virtual void show()= 0;//SingleCore为纯虚类,不能被实例化
};
class SingleCoreA:public SingleCore{
public:
void show(){ cout << "SingleCoreA" << endl; };
};
class SingleCoreB :public SingleCore{
public:
void show(){ cout << "SingleCoreB" << endl; };
};
class Factory{
public:
virtual SingleCore* createSingleCore() = 0;
};
class FactoryA :public Factory{
public:
SingleCore* createSingleCore()
{
return new SingleCoreA();
}
};
class FactoryB :public Factory{
public:
SingleCore* createSingleCore()
{
return new SingleCoreB();
}
};
int main()
{
FactoryA factoryA;
FactoryB factoryB;
SingleCore* singleCoreA = factoryA.createSingleCore();
SingleCore* singleCoreB = factoryB.createSingleCore();
singleCoreA->show();
singleCoreB->show();
system("pause");
}