目录

基本概念

代码及实例


基本概念

工厂方法模式(Factory Method):定义一个用于创建对象的接口,让字类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类;

简单工厂模式的最大优点在用户工厂类中包含了必要的逻辑判断,根据客户端的选择条件动态实例化相关的类,对于客户端来说,去除了具体产品的依赖。

工厂方法模式实现时,客户端需要决定实例化哪一个工厂来实现运算类,选择判断的问题还是存在的,也就是说,工厂方法把简单工厂内部逻辑判断移到了客户端代码来进行。

UML图如下(这里以计算器为例)

代码及实例

程序运行截图如下:

源码如下:

Head.h

#ifndef HEAD_H
#define HEAD_H//运算相关
class Operation{public:double m_numberA;double m_numberB;virtual double getResult();
};class AddOperation: public Operation{public:AddOperation();double getResult();
};class MultiOperation: public Operation{public:MultiOperation();double getResult();
};//工厂相关class IFactory{public:virtual Operation *createOperation();
};class AddFactory: public IFactory{public:Operation *createOperation();
};class MultiFactory: public IFactory{public:Operation *createOperation();
};#endif    //HEAD_H

Head.cpp

#include "Head.h"
#include <iostream>
#include <string>
using namespace std;Operation *IFactory::createOperation()
{return nullptr;
}Operation *AddFactory::createOperation()
{return new AddOperation;
}double Operation::getResult()
{return -1;
}AddOperation::AddOperation()
{m_numberA = 0.0;m_numberB = 0.0;
}double AddOperation::getResult()
{return m_numberA + m_numberB;
}MultiOperation::MultiOperation()
{m_numberA = 0.0;m_numberB = 0.0;
}double MultiOperation::getResult()
{return m_numberA * m_numberB;
}Operation * MultiFactory::createOperation()
{return new MultiOperation;
}

main.cpp

#include "Head.h"
#include <iostream>
using namespace std;int main(int *argc, int *argv){IFactory *operAddFactory = new AddFactory;Operation *addOper = operAddFactory->createOperation();addOper->m_numberA = 100;addOper->m_numberB = 200;cout << "operAddFactory result is : " << addOper->getResult() << endl;delete operAddFactory;delete addOper;cout << "--------------- 华丽的分割线 ---------------" << endl;IFactory *operMultiFactory = new MultiFactory;Operation *multiOper = operMultiFactory->createOperation();multiOper->m_numberA = 12;multiOper->m_numberB = 5;cout << "operMultiFactory result is : " << multiOper->getResult() << endl;delete operMultiFactory;delete multiOper;getchar();return 0;
}

C++设计模式-工厂模式相关推荐

  1. Java设计模式-工厂模式(3)抽象工厂模式

    在Java设计模式-工厂模式(2)工厂方法模式 我们知道了工厂方法模式解决了简单工厂模式中的缺陷,做到了满足开闭原则,但是时代是进步的,进而又产生新的问题,工厂难道只能生产一种东西吗.我们所见到的工厂 ...

  2. Java设计模式-工厂模式(2)工厂方法模式

    在Java设计模式-工厂模式(1)简单工厂模式 中我们介绍了简单工厂模式,提到了简单工厂模式违背了开闭原则,而"工厂方法模式"是对简单工厂模式的进一步抽象化,其好处是可以使系统在不 ...

  3. Java设计模式-工厂模式(1)简单工厂模式

    Java设计模式-工厂模式(1)简单工厂模式 一.前言 1)例子 2)类图关系 3)代码实现 二.简单工厂模式 2.1.概述: 2.2.类图关系: 2.3.代码修改: 2.4.优缺点 2.5.扩展-简 ...

  4. 设计模式---工厂模式

    设计模式---工厂模式 工厂方法模式 概述:工厂方法模式中抽象工厂负责定义创建对象的接口,具体创建工作由继承抽象工厂的具体类实现. 优点:客户端不需要再负责对象的创建,从而明确了各个类的职责,如果有新 ...

  5. java设计模式工厂模式_Java中的工厂设计模式

    java设计模式工厂模式 Welcome to the Factory Design Pattern in Java tutorial. Factory Pattern is one of the C ...

  6. java设计模式工厂模式_Java中的复合设计模式

    java设计模式工厂模式 Composite pattern is one of the Structural design pattern. Composite design pattern is ...

  7. java设计模式工厂模式_Java中的桥梁设计模式

    java设计模式工厂模式 Today we will look into Bridge Design Pattern in java. When we have interface hierarchi ...

  8. java设计模式工厂模式_Java中的外观设计模式

    java设计模式工厂模式 Facade Design Pattern is one of the Structural design patterns (such as Adapter pattern ...

  9. 设计模式-工厂模式(学习)

    设计模式-工厂模式(学习) 在程序的世界里,就像射雕英雄传一样,我们的技能就像是武功一样,我们只有不断去学习练习才能有机会像郭靖一样成为"天下第一". 我认为技能和武功是很类似的, ...

  10. 设计模式-工厂模式的3中不同实现[JAVA]

    设计模式-工厂模式的3中不同实现[JAVA] 工厂模式简介 In Factory pattern, we create object without exposing the creation log ...

最新文章

  1. 表格(table、tr、th、td、colspan、rowspan)
  2. 高并发编程-自定义简易的线程池(2),体会原理
  3. 薪资超大厂,校招天花板!Google大神云集,美团等参投,无人驾驶TOP独角兽!轻舟智航100+offer等你来!...
  4. 定时任务之crond服务
  5. CentOS下编译64位的libpython2.6.so.1.0库
  6. python用jieba模块分词实现关键词提取
  7. Android轩辕剑之ActionBar之三
  8. 世界首例AI同性婚姻惊呆众人 | Siri和Alexa结婚了
  9. ip数据库 纯真 mysql 查询_纯真IP数据库格式详解 附demo
  10. Pgadmin4转圈圈无法进入到界面(pgadmin v4一直卡在loading页面)
  11. 线性代数————思维导图(上岸必备)(矩阵部分)
  12. JDK/ADB环境变量配置
  13. 利用Gazebo搭建赛道,控制小车完成比赛(大学生智能车大赛室外光电组赛道仿真模拟)
  14. 金蝶K3CLOUD7.2内部培训PPT下载
  15. spring-advisor-advised
  16. Unity3D--控制鼠标的显示与隐藏
  17. 【Spring Boot JPA】ManyToOne OneToMany学习笔记
  18. Big Data大数据基础知识
  19. 原生M1芯片Mac版Maxon Cinema 4D R26 C4D中文直装版安装教程,解决卡启动画面无法打卡等问题
  20. 在油猴脚本中添加css样式的方法

热门文章

  1. 第一章课后习题及答案
  2. 轻松学习 Flex 布局的小游戏
  3. 自助式BI工具分享:浅析FineBI
  4. 秋高气爽FreeEIM
  5. 飞秋(FeiQ)海量的用户基数决定了这一模式
  6. 简析Visual C++中的活动数据对象
  7. 图像处理------图像细化
  8. java immutable系列_Java Immutable类代码示例
  9. shell mysql_shell操作mysql
  10. 省选+NOI 第三部分 树上问题