C++设计模式创建型工厂模式

简介: 工厂模式中使用了多态的原理,来将具体实现和接口进行有效的解耦合,符合开闭原则和依赖倒置原则 需要新加功能的时候不需要对原有代码进行修改。 抽象类human和抽象类factory就是调用接口,而实际的生产过程通过factory的子类(如boyfactory)来new...
工厂模式中使用了多态的原理,来将具体实现和接口进行有效的解耦合,符合开闭原则和依赖倒置原则
需要新加功能的时候不需要对原有代码进行修改。
抽象类human和抽象类factory就是调用接口,而实际的生产过程通过factory的子类(如boyfactory)来new
一个具体的human(如:boy)子类然后返回一个human父类的指针完成,如下图:



具体的代码如下:

点击(此处)折叠或打开

  1. #include<iostream>

  2. using namespace std;
  3. //工厂模式新增功能并不会修改原有代码符合开闭原则
  4. //使用多态实现
  5. //纯虚拟接口
  6. class human
  7. {
  8.   public:
  9.     virtual void getman(void) = 0;
  10.     virtual ~human()
  11.     {
  12.         //cout<<"4:"<<endl;
  13.     }
  14. };

  15. class factory
  16. {
  17. public:
  18.     virtual human* greman(void) = 0;
  19.     virtual ~factory()
  20.     {
  21.        // cout<<"3:"<<endl;
  22.     }
  23. };

  24. /////boy
  25. class boy:public human
  26. {
  27. public:
  28.     virtual void getman(void)
  29.     {
  30.         cout<<"I'M BOY!"<<endl;
  31.     }
  32.      virtual ~boy()
  33.     {
  34.       // cout<<"2:"<<endl;
  35.     }
  36. };

  37. class boyfactory:public factory
  38. {
  39. private:
  40.     boy* p;
  41. public:
  42.     virtual human* greman(void) //负责生产boy言外之意就是调用一个new来new出内存空间
  43.     {
  44.         p = new boy;
  45.         return p;
  46.     }
  47.     virtual ~boyfactory()
  48.     {
  49.        // cout<<"1:"<<endl;
  50.         delete p;
  51.     }
  52. };

  53. //后来新建的woman工厂和woman定义
  54. //////////////woman

  55. class woman:public human
  56. {
  57. public:
  58.     virtual void getman(void)
  59.     {
  60.         cout<<"I'M woman!"<<endl;
  61.     }
  62.      virtual ~woman()
  63.     {
  64.      // cout<<"5:"<<endl;
  65.     }
  66. };

  67. class womanfactory:public factory
  68. {
  69. private:
  70.     woman* p;
  71. public:
  72.     virtual human* greman(void) //负责生产woman言外之意就是调用一个new来new出内存空间
  73.     {
  74.         p = new woman;
  75.         return p;
  76.     }
  77.     virtual ~womanfactory()
  78.     {
  79.         //cout<<"6:"<<endl;
  80.         delete p;
  81.     }
  82. };

  83. ///////////////////////

  84. int main(void)
  85. {
  86.     //生产boy
  87.     factory* fa1= new boyfactory;
  88.     human* hm1 = NULL;
  89.     hm1 = fa1->greman();
  90.     hm1->getman();
  91.     delete fa1;
  92.     //生产woman
  93.     factory* fa2= new womanfactory;
  94.     human* hm2 = NULL;
  95.     hm2 = fa2->greman();
  96.     hm2->getman();
  97.     delete fa2;

  98.     cout<<"hello!"<<endl;
  99. }


相关文章
|
5月前
|
设计模式
**工厂模式与抽象工厂模式**都是创建型设计模式,用于封装对象创建,减少耦合
【6月更文挑战第23天】**工厂模式与抽象工厂模式**都是创建型设计模式,用于封装对象创建,减少耦合。工厂模式专注于单个对象,通过具体工厂创建具体产品,适用于简单对象创建;抽象工厂则关注一系列相关产品,提供创建一族对象的接口,适用于处理多个不兼容产品族。选择模式基于问题域的复杂性,单个产品需求时用工厂模式,多产品族时用抽象工厂模式。
32 5
|
6月前
|
设计模式 搜索推荐 数据库连接
第二篇 创建型设计模式 - 灵活、解耦的创建机制
第二篇 创建型设计模式 - 灵活、解耦的创建机制
|
4月前
|
设计模式 C++
C++一分钟之-设计模式:工厂模式与抽象工厂
【7月更文挑战第14天】设计模式是解决软件设计问题的通用方案。工厂模式与抽象工厂模式是创建型模式,用于对象创建而不暴露创建逻辑。工厂模式推迟实例化到子类,但过度使用会增加复杂性。抽象工厂则创建相关对象族,但过度抽象可能造成不必要的复杂度。两者均应按需使用,确保设计灵活性。代码示例展示了C++中如何实现这两种模式。
42 3
|
4月前
|
设计模式 安全 C++
C++一分钟之-C++中的设计模式:单例模式
【7月更文挑战第13天】单例模式确保类只有一个实例,提供全局访问。C++中的实现涉及线程安全和生命周期管理。基础实现使用静态成员,但在多线程环境下可能导致多个实例。为解决此问题,采用双重检查锁定和`std::mutex`保证安全。使用`std::unique_ptr`管理生命周期,防止析构异常和内存泄漏。理解和正确应用单例模式能提升软件的效率与可维护性。
54 2
|
5月前
|
设计模式 Oracle Java
工厂模式是一种创建型设计模式,它提供了一种创建对象的最佳方式。
【6月更文挑战第20天】工厂模式简化对象创建,根据参数或条件生成MySQL或Oracle数据库连接。`DatabaseConnectionFactory`作为工厂,动态返回具体连接类型。装饰器模式则用于运行时动态增加对象功能,如`LoggingDecorator`为`Runnable`对象添加日志记录,保持代码整洁。在`Main`类中展示了如何使用这两种模式。
42 6
|
6月前
|
设计模式 开发框架 算法
C++中的设计模式:基本概念与应用
C++中的设计模式:基本概念与应用
60 2
|
5月前
|
设计模式
创建型设计模式之建造者模式
创建型设计模式之建造者模式
|
6月前
|
设计模式 JavaScript 前端开发
[设计模式Java实现附plantuml源码~创建型] 复杂对象的组装与创建——建造者模式
[设计模式Java实现附plantuml源码~创建型] 复杂对象的组装与创建——建造者模式
|
6月前
|
设计模式 Java Go
[设计模式Java实现附plantuml源码~创建型] 对象的克隆~原型模式
[设计模式Java实现附plantuml源码~创建型] 对象的克隆~原型模式
|
6月前
|
设计模式 Java Go
[设计模式Java实现附plantuml源码~创建型] 产品族的创建——抽象工厂模式
[设计模式Java实现附plantuml源码~创建型] 产品族的创建——抽象工厂模式