工厂方法模式(Factory Method)
来源:互联网 发布:js 修改对象属性值 编辑:程序博客网 时间:2024/06/05 16:08
factory method 提供了一种延迟创建类的方式,使用这个方式可以在运行期由子类判断创建哪一个类的实例。其次,创建一个对象似乎是一个最简单的是object=new ClassName(),但面对大型软件或不同运行环境时就存在问题:
1、简单的创建方式造成硬编码,在不同的运行环境中就需要复杂的逻辑实例化不同的实例。
2、为了使用于不同的运行环境,通常我们需要定义抽象的接口,在不同的环境中实现不同的子类实例
效果:
根据不同的配置及上下文环境加载具有相同抽象类的不同实现实例,实现可配置,动态的创建
#include <iostream>using namespace std;namespace Occ{/** * 职业 */ class Occupation {public: virtual void learn()=0; virtual void write()=0; virtual void read()=0;};class Student: public Occupation {public: void learn() { cout << "学生学习..." << endl; } void write() { cout << "学生写作..." << endl; } void read() { cout << "学生读文章..." << endl; }};class Teacher: public Occupation {public: void learn() { cout << "老师学习..." << endl; } void write() { cout << "老师写作..." << endl; } void read() { cout << "老师读文章..." << endl; }};}namespace IFac{class IFactory {public: virtual Occ::Occupation *createOccupation()=0;};class StudentFactory: public IFactory { Occ::Occupation *createOccupation(){ return new Occ::Student(); }};class TeacherFactory: public IFactory { Occ::Occupation *createOccupation(){ return new Occ::Teacher(); }};}int main() { //需要创建学生时 IFac::IFactory * ifctory =new IFac::StudentFactory(); Occ::Occupation * occupation=ifctory->createOccupation(); occupation->learn(); occupation->write(); occupation->read(); //需要创建老师时 IFac::IFactory * ifctory1 =new IFac::TeacherFactory(); Occ::Occupation * occupation1=ifctory1->createOccupation(); occupation1->learn(); occupation1->write(); occupation1->read(); cout << "!!!Hello World!!!" << endl; // prints !!!Hello World!!! return 0;}
Spring 通过工厂方法来配置bean
bean.xml <bean id="ifctory " class="com.dpicadev.factoryMethod.IFactory "> ...... </bean> <bean id="occupation" factory-bean="ifctory" factory-method="createOccupation"> ..... </bean> <bean id="occupation1" factory-bean="ifctory" factory-method="createOccupation"> ..... </bean> java: ApplicationContext ctx = new ClassPathXmlApplicationContext("bean.xml"); Occupation occupation= (Occupation ) ctx.getBean("occupation"); System.out.println(occupation->learn()); Occupation occupation1= (Occupation ) ctx.getBean("occupation1"); System.out.println(occupation1->learn());
0 0
- 工厂方法模式(Factory Method)
- Factory Method(工厂方法模式)
- 工厂方法模式(Factory Method)
- 工厂方法模式(Factory Method)
- 工厂方法模式(Factory Method)
- 工厂方法模式 Factory Method
- 工厂方法模式(Factory Method)
- 工厂方法模式(Factory Method)
- 工厂方法模式(Factory Method)
- Factory Method-----工厂方法模式
- 工厂方法模式--Factory Method
- Factory Method工厂方法模式
- Factory Method - 工厂方法模式
- 工厂方法模式(Factory Method)
- 工厂方法模式 Factory Method
- 工厂方法(Factory Method)模式
- 工厂方法模式(Factory Method)
- 工厂方法模式(Factory Method)
- Mybatis获取插入记录的自增长ID
- Win10+64位+python2.7+Xgboost安装
- Opencv Error:Assertion failed(size.with>0&&size.height>0) in imshow
- javax.xml.validation.SchemaFactoryConfigurationError: Provider for class javax.xml.validation.Schema
- 南阳理工acm 456 邮票分你一半(常规动态规划)
- 工厂方法模式(Factory Method)
- C++抽象编程——面向对象(8)——最终版的Rational文件
- Tensorflow实例分析Google Inception v3 网络
- CentOS+Nginx+uWSGI+Python多站点环境搭建
- C/C++学习(8)变量在内存中的存储位置
- codeforce 804B Minimum number of steps
- JDBC连接指定路径的数据库
- 十大经典算法之KNN
- hdu3038-并查集