工厂模式是类的创建型模式的一种.在工厂模式中,我们专门定义一个工厂类.这个类用于创建其他类的实例,通常这些实例具有共同的父类.
工厂模式的UML图如下所示:
举例来说,有一个Graph父类,它有两个子类(当然可以更多...):Sphere类和Triangle类.现在要通过工厂类来创建这两个子类的实例.其UML图如下所示:
代码如下:
// 设计模式.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include "iostream" using namespace std; class Graph{ public: virtual void draw()=0; }; class Sphere: public Graph{ public: virtual void draw(){ cout<<"I'm a Sphere!/n"; } }; class Triangle: public Graph{ public: virtual void draw(){ cout<<"I'm a Triangle!/n"; } }; class GraphFactory{ public: Graph *CreateGraph(int flag){ switch(flag){ case 1: return new Sphere(); case 2: return new Triangle(); default: return NULL; } } }; int _tmain(int argc, _TCHAR* argv[]) { GraphFactory factory; Graph* myGraph; myGraph = factory.CreateGraph(1); myGraph->draw(); delete myGraph; myGraph = factory.CreateGraph(2); myGraph = factory.CreateGraph(2); myGraph->draw(); delete myGraph; return 0; }
工厂模式的优点:
1) 调用端不需要负责具体实例化,实例化由工厂完成;
工厂模式的缺点:
1) 工厂类集中了所有实例的创建逻辑,容易违反高内聚的责任分配原则;
2) 虽然简单工厂模式的一次性使用。它所能创建的类只能是事先教考虑到的,如果需要添加新的类,则就需要改变工厂类。