简单工厂模式初步尝试
简单工厂模式:
- 官方来说:简单工厂模式是属于创建型模式,又叫做静态工厂方法(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了一个对象,然后,就跟着一段异常处理代码,这时编码变的极其混乱和臃肿。那么怎么办?怎么办?此时,我们需要一个新的类,专门从事对象的建立和释放,之后,对象的各种操作,和这个类没有任何关系。这个专门建立对象的类,向外暴漏创建对象的接口,供外部调用。
工厂模式有一种非常形象的描述,建立对象的类就如一个工厂,而需要被建立的对象就是一个个产品;在工厂中加工产品,使用产品的人,不用在乎产品是如何生产出来的。从软件开发的角度来说,这样就有效的降低了模块之间的耦合。