设计模式-创建型01-简单工厂
2013-12-29 21:29
274 查看
一,动机
假设有这么一个软件应用场景,一个软件系统可以提供多个外观不同的按钮,这些按钮源自于一个抽象按钮,子按钮在继承抽象按钮后做了相应的实现。如果我们在使用这些按钮时,不需要具体知道这些具体按钮的名字,只需要知道表示那个按钮的标识符,并提供一个调用方法即可。(熟悉Win32编程的朋友可是想想CreateWindow这个函数)
这样,传入该参数即可返回一个响应的按钮对象。
这种思想,即为简单工厂
二,定义
定义:简单工厂模式又称为静态工厂模式,属于创建型模式。在简单工厂模式中,可以根据参数不同返回不同类的实例。
三,模式结构
1.Factory 工厂角色
负责创建所有实例的内部逻辑
2.Product 抽象产品角色
工厂所创建的所有对象的父类
3.ConcreteProduct 具体产品角色
工厂的创建目标
四,代码实例
这里,我将使用 学生与学校之间的例子。
学校可以培养 本科生,研究生等。当(企业)需要某学位的学生时,只需要调用学校提供的方法,就能方便的聘用一个学生。
UML图为:
抽象的学生类
具体的两个学生子类
学校,即工厂
自定义的异常
测试
输出:
假设有这么一个软件应用场景,一个软件系统可以提供多个外观不同的按钮,这些按钮源自于一个抽象按钮,子按钮在继承抽象按钮后做了相应的实现。如果我们在使用这些按钮时,不需要具体知道这些具体按钮的名字,只需要知道表示那个按钮的标识符,并提供一个调用方法即可。(熟悉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; }
输出:
学校培养 本科生 我是本科生......很高兴得到聘用
相关文章推荐
- 设计模式--创建型模式之简单工厂模式
- [Java] 设计模式之工厂系列 01 简单工厂 - 缺点 :产生产品系列的时候很麻烦,会工厂泛滥
- 创建型设计模式-简单工厂模式
- 设计模式--创建型--简单工厂
- JAVA设计模式-01-简单工厂模式
- [C#]设计模式-简单工厂-创建型模式
- 设计模式-创建型模式:简单工厂SimpleFactory
- [Java] 设计模式之工厂系列 01 简单工厂 - 缺点 :产生产品系列的时候很麻烦,会工厂泛滥
- 【转】设计模式——创建型设计模式总结(简单工厂、普通工厂、抽象工厂、建造者、原型和单例)
- 创建型设计模式之手工打造、简单工厂、工厂方法和抽象工厂(新)
- Java技术_每天掌握一种设计模式(003)_使用场景及简单实例(创建型:工厂方法)
- JAVA设计模式(01):创建型-工厂模式【简单工厂模式】(Simple Factory)
- JAVA设计模式(01):创建型-工厂模式【工厂方法模式】(Factory Method)
- 设计模式之简单工厂(创建型模式)
- JAVA设计模式(01):创建型-工厂模式【简单工厂模式】(Simple Factory)
- 设计模式(2)-创建型-简单工厂,工厂,抽象工厂模式(Factory)
- 设计模式-创建型-简单工厂模式
- 设计模式(1)の创建型の工厂方法模式(Factory Method)の(普通|简单)工厂模式
- 设计模式学习札记(一):创建型模式之简单工厂模式
- 设计模式(2)-创建型-简单工厂,工厂,抽象工厂模式(Factory)