简单工厂模式初步尝试
2017-06-05 22:58
239 查看
简单工厂模式:
官方来说:简单工厂模式是属于创建型模式,又叫做静态工厂方法(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了一个对象,然后,就跟着一段异常处理代码,这时编码变的极其混乱和臃肿。那么怎么办?怎么办?此时,我们需要一个新的类,专门从事对象的建立和释放,之后,对象的各种操作,和这个类没有任何关系。这个专门建立对象的类,向外暴漏创建对象的接口,供外部调用。
工厂模式有一种非常形象的描述,建立对象的类就如一个工厂,而需要被建立的对象就是一个个产品;在工厂中加工产品,使用产品的人,不用在乎产品是如何生产出来的。从软件开发的角度来说,这样就有效的降低了模块之间的耦合。
相关文章推荐
- 作业七-四则运算与简单工厂模式初步结合
- 设计模式之-简单工厂、工厂方法、抽象工厂
- Dot Net 设计模式—简单工厂
- 解析Petshop 3.0 简单工厂(Simple Factory)模式
- 单态模式(Singleton)简单工厂(Simple Factory)
- JAVA设计模式——简单工厂(Simple Factory)模式
- 简单工厂创立性模式介绍
- 简单工厂模式,抽象工厂模式,反射工厂模式的代码总结
- 简单工厂设计模式-设计模式(1)
- 简单的工厂模式
- 小菜编程成长记(五 体会简单工厂模式的美妙)
- (4)简单工厂模式 — Simple Factory — 文物管理衙门 — 和申的经营之道第一部分
- C#设计模式之简单工厂篇
- 爪哇语言简单工厂创立性模式介绍
- 简单工厂设计模式-设计模式(1)
- 简单工厂模式(Simple Factory Pattern)
- 爪哇语言简单工厂创立性模式介绍
- zt:工厂模式-简单工厂(设计模式的入门级模式—初级)
- C#设计模式学习笔记---简单工厂模式
- 阎宏:Java语言简单工厂创立性模式介绍