C++设计模式-工厂模式
发布日期:2021-06-30 11:01:49
浏览次数:2
分类:技术文章
本文共 2342 字,大约阅读时间需要 7 分钟。
目录
基本概念
工厂方法模式(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#include 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"#includeusing 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;}
转载地址:https://it1995.blog.csdn.net/article/details/91876487 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
留言是一种美德,欢迎回访!
[***.207.175.100]2024年04月30日 18时54分13秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
如何申请企业邮箱注册,如何购买邮箱?
2019-04-30
购买企业邮箱,哪个邮箱最好用?邮件撤回怎么操作?
2019-04-30
电子邮箱是什么?如何申请电子邮箱,申请电子邮箱好处
2019-04-30
如何注册海外邮箱?如何进行邮箱注册163,这些技巧交给你
2019-04-30
企业邮件注册,手机怎么注册邮箱?
2019-04-30
【转载】舍弃 Python+C,Salesforce 将企业级软件全面迁移到 Go 语言
2019-04-30
ConnectorStartFailedException
2019-04-30
Windows上配置Gradle环境
2019-04-30
maven 多层次pom 新引入包,编译成功,还是没有将包引入到本地
2019-04-30
leetCode2 两数相加
2019-04-30
【工具使用】使用pip与conda安装、更新与卸载Pytorch和torchvision
2019-04-30
【工具使用】Google免费云环境Colaboratory使用
2019-04-30
【深度学习笔记】卷积层,全连接层,池化层的相关输出参数计算
2019-04-30
【NLP学习笔记】文本分类概述
2019-04-30
【深度学习笔记】文本分类
2019-04-30