简单工厂模式初步尝试

简单工厂模式:

  • 官方来说:简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现。——来自百度百科
  • 自我理解:通过一些网上知识点分享,在我看来,工厂模式,就是为了进行不同类的操作而出现的,在工厂类中创建一个基类指针,通过传入参数的形式,返回不同的派生类。

在这里我以自己写的一个以Random为基类,randomNum 和 randomOperator 为派生类,来说明个人对于简单工厂模式的初步理解(目前还没有和整个四则运算牵扯在一起)

#include<iostream>
#include<cstdio>
#include <time.h> 
using namespace std;
class Random {                   //基类
private:
	int a;
public:
	Random() {}
	~Random(){}
	virtual int creatrand() { return -1; }   //利用虚函数
	virtual void print(){}
};
class randomNumber :public Random            ///随机数
{
public:
	randomNumber() { cout << "产生随机数: " ; }
	~randomNumber(){}
	virtual void print() {
		cout << changeNum(creatrand());
	}
	char changeNum(int k)
	{
		return k + 48;
	}
	virtual int creatrand();
};
int randomNumber::creatrand()
{
	return rand() % 10;
}
class randomOperator : public Random     //随机符
{
public:
	randomOperator() { cout << "产生随机运算符: " ; }
	~randomOperator(){}
	virtual int creatrand();
	virtual void print() {
		cout << changeOper(creatrand());
	}
	char changeOper(int k);
};
char randomOperator::changeOper(int k)
{
		switch (k)
		{
		case 0:return '+';
		case 1:return '-';
		case 2:return '*';
		case 3:return '/';
		default:return ' ';
		}
}
int  randomOperator::creatrand()
{
	return rand() % 4;
}
class Factory {
public:
	Factory(){}
	~Factory(){}
	Random * produce(int k)
	{
		switch (k)
		{
		case 1:return new randomNumber();
		case 2:return new randomOperator();
		default:return NULL;
		}
	}
};
int main()
{
	Factory * p = new Factory();   //工厂指针
	int k = 0;
	cout << "输入想得到的随机类型,0表示输入结束,1表示生成随机数,2表示生成随机符:\n";
	while (1)
	{
		cin >> k;
		if (k == 0) break;
		Random * rand_ptr = p->produce(k); // 派生类类型选择
		if (rand_ptr == NULL) 
			cout << "不存在该类型重新输入:";
		else 
			rand_ptr->print();   //输出
		cout << endl;
		delete rand_ptr;
	}
	system("pause");
	return 0;
}

运行结果截图:

体会:

利用简单工厂模式,可以使得更加体现面向对象的思想,加强了封装性,同样的我认为利用该模式,促进了代码的片段化,进行类的管理,像网上说的一段话:

做了一个windows 8平台的阅读器。首先,需要将电子书中的内容渲染到屏幕上,而电子书每一页都包含各种各样的内容,比如:图形、图像和文字等等;不同的内容,就是不同的对象;在将不同的内容渲染到屏幕上之前,就需要new操作,建立不同的对象,然后再在屏幕上进行描绘。这个时候,就需要进行很多new操作,new操作分布在代码的不同地方,管理起来很麻烦,而且也很乱,到后期扩展和维护的时候,有的时候,对象多的让开发人员不知道这个对象是干什么的,这就增加了难度;同时,new操作,都会有对应的异常处理,最后,就会发现,在代码中,new了一个对象,然后,就跟着一段异常处理代码,这时编码变的极其混乱和臃肿。那么怎么办?怎么办?此时,我们需要一个新的类,专门从事对象的建立和释放,之后,对象的各种操作,和这个类没有任何关系。这个专门建立对象的类,向外暴漏创建对象的接口,供外部调用。

工厂模式有一种非常形象的描述,建立对象的类就如一个工厂,而需要被建立的对象就是一个个产品;在工厂中加工产品,使用产品的人,不用在乎产品是如何生产出来的。从软件开发的角度来说,这样就有效的降低了模块之间的耦合。

posted @ 2017-06-05 22:58  Linese  阅读(226)  评论(0编辑  收藏  举报