C++设计模式-工厂模式
目录
基本概念
代码及实例
基本概念
工厂方法模式(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++设计模式-工厂模式相关推荐
- Java设计模式-工厂模式(3)抽象工厂模式
在Java设计模式-工厂模式(2)工厂方法模式 我们知道了工厂方法模式解决了简单工厂模式中的缺陷,做到了满足开闭原则,但是时代是进步的,进而又产生新的问题,工厂难道只能生产一种东西吗.我们所见到的工厂 ...
- Java设计模式-工厂模式(2)工厂方法模式
在Java设计模式-工厂模式(1)简单工厂模式 中我们介绍了简单工厂模式,提到了简单工厂模式违背了开闭原则,而"工厂方法模式"是对简单工厂模式的进一步抽象化,其好处是可以使系统在不 ...
- Java设计模式-工厂模式(1)简单工厂模式
Java设计模式-工厂模式(1)简单工厂模式 一.前言 1)例子 2)类图关系 3)代码实现 二.简单工厂模式 2.1.概述: 2.2.类图关系: 2.3.代码修改: 2.4.优缺点 2.5.扩展-简 ...
- 设计模式---工厂模式
设计模式---工厂模式 工厂方法模式 概述:工厂方法模式中抽象工厂负责定义创建对象的接口,具体创建工作由继承抽象工厂的具体类实现. 优点:客户端不需要再负责对象的创建,从而明确了各个类的职责,如果有新 ...
- java设计模式工厂模式_Java中的工厂设计模式
java设计模式工厂模式 Welcome to the Factory Design Pattern in Java tutorial. Factory Pattern is one of the C ...
- java设计模式工厂模式_Java中的复合设计模式
java设计模式工厂模式 Composite pattern is one of the Structural design pattern. Composite design pattern is ...
- java设计模式工厂模式_Java中的桥梁设计模式
java设计模式工厂模式 Today we will look into Bridge Design Pattern in java. When we have interface hierarchi ...
- java设计模式工厂模式_Java中的外观设计模式
java设计模式工厂模式 Facade Design Pattern is one of the Structural design patterns (such as Adapter pattern ...
- 设计模式-工厂模式(学习)
设计模式-工厂模式(学习) 在程序的世界里,就像射雕英雄传一样,我们的技能就像是武功一样,我们只有不断去学习练习才能有机会像郭靖一样成为"天下第一". 我认为技能和武功是很类似的, ...
- 设计模式-工厂模式的3中不同实现[JAVA]
设计模式-工厂模式的3中不同实现[JAVA] 工厂模式简介 In Factory pattern, we create object without exposing the creation log ...
最新文章
- 表格(table、tr、th、td、colspan、rowspan)
- 高并发编程-自定义简易的线程池(2),体会原理
- 薪资超大厂,校招天花板!Google大神云集,美团等参投,无人驾驶TOP独角兽!轻舟智航100+offer等你来!...
- 定时任务之crond服务
- CentOS下编译64位的libpython2.6.so.1.0库
- python用jieba模块分词实现关键词提取
- Android轩辕剑之ActionBar之三
- 世界首例AI同性婚姻惊呆众人 | Siri和Alexa结婚了
- ip数据库 纯真 mysql 查询_纯真IP数据库格式详解 附demo
- Pgadmin4转圈圈无法进入到界面(pgadmin v4一直卡在loading页面)
- 线性代数————思维导图(上岸必备)(矩阵部分)
- JDK/ADB环境变量配置
- 利用Gazebo搭建赛道,控制小车完成比赛(大学生智能车大赛室外光电组赛道仿真模拟)
- 金蝶K3CLOUD7.2内部培训PPT下载
- spring-advisor-advised
- Unity3D--控制鼠标的显示与隐藏
- 【Spring Boot JPA】ManyToOne OneToMany学习笔记
- Big Data大数据基础知识
- 原生M1芯片Mac版Maxon Cinema 4D R26 C4D中文直装版安装教程,解决卡启动画面无法打卡等问题
- 在油猴脚本中添加css样式的方法