设计模式C++版:第八式工厂方法模式
2016-09-03 10:37
204 查看
我们已经介绍了“简单”工厂,这才是实实在在的工厂模式。下面是关于她的简单定义和代码示例:
工厂模式定义:创建一个用于创建对象的接口,让子类决定实例化哪一个子类,并把这种实例化延迟到它的子类。
最后再说一下,如果我们创建的较多的类,比如我们认为警察都是好人,我们需要再添加一个警察工厂和一个具体的警察类。这样的改动我们需要增加的代码量变大了。另外客户端需要知道更多的类型了,也自然要包含更多的头文件。如果一个正常文件,文档的第一屏全部的三四十行都是头文件,是我的话,看到这种代码估计又要感觉不爽了。当然这种情况可以使用一些小技巧规避。比如添加一个header.h,把需要的头文件都包含进去,而后其他的文件只需要调用这个header.h 即可。这种方法大家都见过,尤其适用vs编程时更是常见,这么一说估计很多人都明白了,对的,就是那个经常出现的stdfx.h,它几乎包含了所有windows下编程常用到的头文件。
工厂模式定义:创建一个用于创建对象的接口,让子类决定实例化哪一个子类,并把这种实例化延迟到它的子类。
#include <iostream> class GoodMan { public: virtual ~GoodMan(){ } virtual void kindhearted() { std::cout << "好人善良" << std::endl; } virtual void helpohters() { std::cout << "好人帮人" << std::endl; } private: }; class Undergraduate :public GoodMan { public: void kindhearted() { std::cout << "学生善良" << std::endl; } void helpohters() { std::cout << "学生们帮助他人" << std::endl; } }; class Volunteer :public GoodMan { public: void kindhearted() { std::cout << "自愿者善良" << std::endl; } void helpohters() { std::cout << "自愿者帮助他人" << std::endl; } }; /////////////////////工厂方法/////////////// class IFactory //接口类 { public: IFactory() :m_goodman(nullptr){} virtual GoodMan* createGoodMan(){ return m_goodman; } virtual ~IFactory() { if (m_goodman!=nullptr) { delete m_goodman; } } protected: GoodMan * m_goodman; }; class UndergraduateFactory :public IFactory { public: GoodMan* createGoodMan() { m_goodman = new Undergraduate; return m_goodman; } }; class VolunteerFactory :public IFactory { public: GoodMan *createGoodMan() { m_goodman = new Volunteer; return m_goodman; } }; int main() { IFactory *factory = new UndergraduateFactory; //创建具体工厂 GoodMan *student = factory->createGoodMan(); //创建实际对象 student->helpohters(); student->kindhearted(); delete factory; return 0; }
最后再说一下,如果我们创建的较多的类,比如我们认为警察都是好人,我们需要再添加一个警察工厂和一个具体的警察类。这样的改动我们需要增加的代码量变大了。另外客户端需要知道更多的类型了,也自然要包含更多的头文件。如果一个正常文件,文档的第一屏全部的三四十行都是头文件,是我的话,看到这种代码估计又要感觉不爽了。当然这种情况可以使用一些小技巧规避。比如添加一个header.h,把需要的头文件都包含进去,而后其他的文件只需要调用这个header.h 即可。这种方法大家都见过,尤其适用vs编程时更是常见,这么一说估计很多人都明白了,对的,就是那个经常出现的stdfx.h,它几乎包含了所有windows下编程常用到的头文件。
相关文章推荐
- 设计模式:工厂方法模式(4.1)C++版
- 我所理解的设计模式(C++实现)——工厂方法模式(Factory Method Pattern)
- C++设计模式——工厂方法模式
- C++设计模式四--FactoryPattern(工厂方法模式)
- 设计模式C++实现-简单工厂模式、工厂方法模式、抽象工厂模式
- 设计模式 工厂方法模式 C++实现
- C++设计模式之工厂方法模式(Factory Method)
- c++设计模式之工厂方法模式
- 设计模式之工厂方法模式(C++实现)
- C++设计模式——工厂方法模式
- C++设计模式之工厂方法模式(一)
- C++设计模式——工厂方法模式
- C++设计模式——工厂方法模式
- 设计模式C++实现(18)——工厂方法模式
- c++设计模式—工厂方法模式
- C++设计模式之工厂方法模式
- 设计模式C++实现五:工厂方法模式
- C++设计模式之工厂方法模式
- 设计模式之简单工厂,工厂方法模式(c++)
- c++设计模式之工厂方法模式