工厂方法模式(factory method) :
定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到他的子类。
简单工厂模式和工厂方法模式的区别:
1.简单工厂模式
简单工厂模式的最大优点在于工厂类中包含了必要的逻辑判断,根据客户端的选择条件动态实例化相关的类,对于客户端来说,去除了与具体产品的依赖。
2.工厂方法模式
工厂方法模式实现时,客户需要决定实例化哪一个工厂来决定产品类,判断选择的问题还是存在的,也就是说:工厂方法把简单工厂的内部逻辑判断移到了客户端代码来实现。你想要加功能,本来是修改工厂类的,而现在是修改客户端。
工厂方法模式的一般形式:
- //定义工厂方法所创建的对象的接口
- class Product
- {
- public:
- void performance();
- };
- //具体的产品,实现Product接口
- class ConcreteProduct : public Product
- {
- public:
- }
- //声明工厂方法,该方法返回一个Product类型的对象
- class Creator
- {
- public:
- virtural Product * Create() = 0;
- }
- //重定义工厂方法以返回一个ConcreteProduct实例
- class ConcreteCreator : public Creator
- {
- public:
- Product * Create()
- {
- return new ConcreteProduct();
- }
- }
一个具体的工厂方法模式的实例:
- #include <iostream>
- using namespace std;
- //志愿者
- class volunteer
- {
- public:
- void regular()
- {
- cout << "维持秩序" << endl;
- }
- void guid()
- {
- cout << "向导" << endl;
- }
- void help()
- {
- cout << "助人为乐" << endl;
- }
- };
- //大学生志愿者
- class undergraduate : public volunteer
- {
- };
- //社会志愿者
- class society : public volunteer
- {
- };
- //抽象工厂(用来生产志愿者,虽然听起来很别扭,呵呵)
- class factory
- {
- public:
- virtual volunteer * CreateVolunteer() = 0;
- };
- //具体工厂(用来生产大学生志愿者)
- class undergraduatefactory : public factory
- {
- public:
- volunteer * CreateVolunteer()
- {
- cout << "创建大学生志愿者:" << endl;
- return new undergraduate();
- }
- };
- //具体工厂(用来生产社会志愿者)
- class societyfactory : public factory
- {
- public:
- volunteer * CreateVolunteer()
- {
- cout << "创建社会志愿者:" << endl;
- return new society();
- }
- };
- int main()
- {
- factory * _afactory = new undergraduatefactory();
- volunteer * _avolunteer = _afactory->CreateVolunteer();
- _avolunteer->guid();
- factory * _bfactory = new societyfactory();
- volunteer * _bvolunteer = _bfactory->CreateVolunteer();
- _bvolunteer->regular();
- return 0;
- }