设计模式-创建型01-简单工厂
来源:互联网 发布:ai软件免费下载 编辑:程序博客网 时间:2024/05/18 09:29
一,动机
假设有这么一个软件应用场景,一个软件系统可以提供多个外观不同的按钮,这些按钮源自于一个抽象按钮,子按钮在继承抽象按钮后做了相应的实现。如果我们在使用这些按钮时,不需要具体知道这些具体按钮的名字,只需要知道表示那个按钮的标识符,并提供一个调用方法即可。(熟悉Win32编程的朋友可是想想CreateWindow这个函数)
这样,传入该参数即可返回一个响应的按钮对象。
这种思想,即为简单工厂
二,定义
定义:简单工厂模式又称为静态工厂模式,属于创建型模式。在简单工厂模式中,可以根据参数不同返回不同类的实例。
三,模式结构
1.Factory 工厂角色
负责创建所有实例的内部逻辑
2.Product 抽象产品角色
工厂所创建的所有对象的父类
3.ConcreteProduct 具体产品角色
工厂的创建目标
四,代码实例
这里,我将使用 学生与学校之间的例子。
学校可以培养 本科生,研究生等。当(企业)需要某学位的学生时,只需要调用学校提供的方法,就能方便的聘用一个学生。
UML图为:
抽象的学生类
class Student{ public: virtual void Say()=0;};
具体的两个学生子类
class UnderGraduate: public Student{ public: void Say() { cout<<"我是本科生......很高兴得到聘用"<<endl ; }};class PostGraduate: public Student{ public: void Say() { cout<<"我是研究生......初次见面,多多关照"<<endl ; }};
学校,即工厂
class StudentFactory{ public: static Student* produceStudent(string level) { try { if(level =="UnderGraduate") { cout<<"学校培养 本科生"<<endl; return new UnderGraduate(); } if(level==("PostGraduate")) { cout<<"学校培养 研究生"<<endl; return new PostGraduate(); } else { throw UnknownStudent("没有这种学位"); } } catch(UnknownStudent &e) { cout<<e.GetErrInfo()<<endl ; } return nullptr; }};
自定义的异常
class UnknownStudent{public: UnknownStudent(string tmpInfo) { info = tmpInfo ; } string GetErrInfo() { return info ; }private: string info;};
测试
int main(){ Student* test = StudentFactory::produceStudent("UnderGraduate"); if(test == nullptr) return -1; test->Say();// cout<<typeid(test).name()<<endl; return 0;}
输出:
学校培养 本科生我是本科生......很高兴得到聘用
0 0
- 设计模式-创建型01-简单工厂
- 创建型设计模式:简单工厂模式
- 创建型设计模式-简单工厂模式
- 设计模式--创建型--简单工厂
- Golang设计模式-创建型-简单工厂
- JAVA设计模式(01):创建型-工厂模式【简单工厂模式】(Simple Factory)
- JAVA设计模式(01):创建型-工厂模式【简单工厂模式】(Simple Factory)
- JAVA设计模式(01):创建型-工厂模式【简单工厂模式】(Simple Factory)
- 设计模式01之 简单工厂模式(创建模式)
- java设计模式之创建型模式-简单工厂模式
- 设计模式->创建型模式->简单工厂模式
- "围观"设计模式(8)--创建型之简单工厂模式、工厂方法模式、抽象工厂模式
- "围观"设计模式(8)--创建型之简单工厂模式、工厂方法模式、抽象工厂模式
- 【JavaScript设计模式】创建型设计模式--简单工厂、工厂方法、抽象工厂
- (4)设计模式方法-创建型设计模式--:简单工厂模式【【【工厂方法模式
- 设计模式之简单工厂(创建型模式)
- 设计模式1:简单工厂模式【创建型】
- 创建型设计模式——简单工厂模式
- PGXC: data distribution in a subset of nodes
- 线程清除处理程序
- 编译原理-03 词法分析
- Hibernate:反向生成的pojo有两个的问题
- 快速阅读
- 设计模式-创建型01-简单工厂
- 看懂论文的机器学习基本知识(五)--随机森林、决策树
- berkeley db--进阶特性分析
- 使用node.js + express开发web应用笔记(2) - vash视图引擎
- 幽默
- 3D 分析
- 引用与const(二)
- 二分图各项
- 判断两个IP大小及是否在同一个网段中