背景:
在开发过程中,经常会创建大量的对象,创建对象后还会涉及到一系列的初始化操作,而我们也不一定会只是在创建对象之后马上就使用对象,而且如果初始化操作很复杂,代码看起来就会非常杂乱,如果有变动,所有的初始化操作都要进行修改,相当难以维护。
功能:
将对象的创建和使用分离开来,专门用于创建对象并初始化。并且进行扩展后,可以根据参数不同,创建不同的对象。
例子:
// 设计模式Demo.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <iostream>
#include <string>
using namespace std;
//被创建的对象基类
class Product
{
protected:
int num;
string name;
public:
void setNum(int n)
{
num = n;
}
void setName(string na)
{
name = na;
}
virtual void show() = 0;
};
//子类1
class Product1 : public Product
{
void show()
{
cout<<"Product1 num: "<<num<<" name: "<<name<<endl;
}
};
//子类2
class Product2 : public Product
{
void show()
{
cout<<"Product2 num: "<<num<<" name: "<<name<<endl;
}
};
//简单工厂类
class SimpleFactory
{
public:
static Product* GetProduct(int kind, int num, string name)
{
switch (kind)
{
case 1:
{
Product* product = new Product1();
product->setNum(num);
product->setName(name);
return product;
}
case 2:
{
Product* product = new Product2();
product->setNum(num);
product->setName(name);
return product;
}
default:
return NULL;
}
}
};
int _tmain(int argc, _TCHAR* argv[])
{
SimpleFactory factory;
Product* product = factory.GetProduct(1, 0, "hehe");
product->show();
product = factory.GetProduct(2, 1, "haha");
product->show();
getchar();
return 0;
}
结果:
Product1 num: 0 name: hehe
Product2 num: 1 name: haha
可见,使用了简单工厂模式之后,创建一个对象的代码变得十分简洁,修改时仅需要在工厂类内部进行一些修改,而不需要像原来一样,每次创建对象的地方都要进行修改。大大的增加了代码的简洁性。