您的位置:首页 > 其它

设计模式学习笔记--简单工厂模式

2015-06-06 22:53 281 查看

背景:

在开发过程中,经常会创建大量的对象,创建对象后还会涉及到一系列的初始化操作,而我们也不一定会只是在创建对象之后马上就使用对象,而且如果初始化操作很复杂,代码看起来就会非常杂乱,如果有变动,所有的初始化操作都要进行修改,相当难以维护。

功能:

将对象的创建和使用分离开来,专门用于创建对象并初始化。并且进行扩展后,可以根据参数不同,创建不同的对象。

例子:

// 设计模式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

可见,使用了简单工厂模式之后,创建一个对象的代码变得十分简洁,修改时仅需要在工厂类内部进行一些修改,而不需要像原来一样,每次创建对象的地方都要进行修改。大大的增加了代码的简洁性。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: