Fork me on GitHub

简单工厂模式(Simple Factory Pattern)

简单工厂模式按照设计模式类型分的话是属于创建型模式,他是工厂模式中最简单的一种,他不属于GoF 23中设计模式之一,但是是简单实用的。他是有一个工厂对象来决定创建哪一种对象的实例。

实现比较简单,这里我只贴出类图和调用方法:

调用方法:

1
2
3
4
5
6
7
IProduct * simpleFactory::Create(std::string className)
{
if( className == "Ipad")
return new Ipad();
if(className == "IPhone")
return new IPhone();
}

优点:外界只要传入类的名字或者识别符即可,不需要关心具体创建过程,只顾“消费”就可以了。各有各的指责和权力,分工明确,利于整个软件架构优化。

缺点:违反里高内聚责任分配原则,将全部逻辑放到一个工厂类中,如果需要支持新的类,那就必须改变工厂类了。

这里只有一种工厂,一个系列的产品,那如果有多个系列的产品呢?问题如何解决?

应用场景:

1.我的asp.net程序需要根据客户实际所用数据库来配置,那么我的程序支持所有的数据库,具体用到哪个,配置文件配置一下即可。这个C#/Java里的反射就可以实现。

2.MFC里的Seralize功能。