工厂方法模式
应用场景
工厂方法模式对简单工厂模式进行了抽象。有一个抽象的Factory类(可以是抽象类和接口),这个类将不再负责具体的产品生产,而是只制定一些规范,具体的生产工作由其子类去完成。在这个模式中,工厂类和产品类往往可以依次对应。即一个抽象工厂对应一个抽象产品,一个具体工厂对应一个具体产品,这个具体的工厂就负责生产对应的产品。
优缺点
优点:
- 将简单工厂进行进一步抽象,满足了开放封闭原则。简单工厂中,如果添加新的功能,则需要修改工厂实现方法中的分支逻辑,违背了修改封闭,扩展开放的原则,而工厂方法模式中对此进行了完善;
缺点:
- 工厂方法将简单工厂的内部逻辑判断转移到了客户端代码中进行,如客户端需要自己去判断需要实例化哪个工厂类。如果需要添加新的功能,原本需要修改的时工厂类的实现,现在则需要修改客户端;
实例
#include <iOStream>
#include <string>
using namespace std;
class Operation
{
public:
double numberA, numberB;
virtual double getResult()//
{
return 0;
}
};
class addOperation :public Operation
{
double getResult()
{
return numberA + numberB;
}
};
class subOperation :public Operation
{
double getResult()
{
return numberA - numberB;
}
};
class mulOperation :public Operation
{
double getResult()
{
return numberA*numberB;
}
};
class pOperation :public Operation
{
double getResult()
{
return numberA / numberB;
}
};
class IFactory
{
public:
virtual Operation *createOperation() = 0;
};
class AddFactory :public IFactory
{
public:
static Operation *createOperation()
{
return new addOperation();
}
};
class SubFactory :public IFactory
{
public:
static Operation *createOperation()
{
return new subOperation();
}
};
class MulFactory :public IFactory
{
public:
static Operation *createOperation()
{
return new mulOperation();
}
};
class DivFactory :public IFactory
{
public:
static Operation *createOperation()
{
return new pOperation();
}
};
int main()
{
Operation *oper = MulFactory::createOperation();
oper->numberA = 9;
oper->numberB = 99;
cout << oper->getResult() << endl;
cin.get();
return 0;
}
相关阅读
在提到高性能服务器编程的时候肯定有听过reactor模式,如果只是简单的写一个服务器和客户端建立连接的程序来熟悉一下使用socket函
Win7运行命令在哪?ALT旁边的WIN徽标键,再按R,即win+R,就是运行命令快捷键windows7开始中一开始是没有“运行”的,如下图红色椭圆处所示
微信宣布“微信指数”正式上线。据腾讯方面介绍,它是微信官方提供,基于微信大数据分析的移动端的指数哦,你如果要看一件事的热度如何
360[极速模式]浏览器无法加载插件(mooc)的解决方案摸索
我们可能在浏览一些基于网络的文档共享的网站时会遇到“无法加载插件”的提示,如道客巴巴(doc88)慕课(mooc)等,我们心里也清楚这个是fla
Directory.GetFiles 方法 返回指定目录中文件的名称(包括其路径)。命名空间: System.IO程序集: mscorlib(mscorlib.dll 中)En