设计模式 -- 1:简单工厂模式

news/2024/4/27 19:46:05

目录

    • 代码记录
    • 代码部分

代码记录

设计模式的代码注意要运用到面向对象的思想 考虑到紧耦合和松耦合
把具体的操作类分开 不让其互相影响(注意这点)
下面是UML类图

在这里插入图片描述

代码部分

#include <iostream>  
#include <memory> // 引入智能指针的头文件  using namespace std;// 操作基类  
class Operate {
public:Operate() {}virtual ~Operate() {}virtual int GetResult() = 0; // 纯虚函数,强制派生类实现  void  SetNumsA(int A){NumsA = A;}void SetNumsB(int B){NumsB = B;}
protected:int NumsA, NumsB;
};// 加法操作类  
class AddOperate : public Operate {
public:int GetResult() override {return NumsA + NumsB;}
};// 减法操作类  
class SubOperate : public Operate {
public:int GetResult() override {return NumsA - NumsB;}
};// 乘法操作类  
class MulOperate : public Operate {
public:int GetResult() override {return NumsA * NumsB;}
};// 除法操作类  
class DivOperate : public Operate {
public:int GetResult() override {if (NumsB == 0) {throw runtime_error("Division by zero is not allowed.");}return NumsA / NumsB;}
};// 操作工厂类  
class OperateFactory {
public:OperateFactory() {}std::unique_ptr<Operate> CreateOperate(char op) {switch (op) {case '+': return std::make_unique<AddOperate>();case '-': return std::make_unique<SubOperate>();case '*': return std::make_unique<MulOperate>();case '/': return std::make_unique<DivOperate>();default:throw runtime_error("No such operation!");}}
};int main() {try {OperateFactory factory;char op = '/';int numA = 100, numB = 700;std::unique_ptr<Operate> operate = factory.CreateOperate(op);operate->SetNumsA(numA);operate->SetNumsB(0);cout << operate->GetResult() << endl;}catch (const exception& e) {cout << "Error: " << e.what() << endl;}return 0;
}

代码参考书:
大话设计模式

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.cpky.cn/p/10762.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

Python哪个版本最稳定好用2023.10.19

环境&#xff1a; win10 专业版 Python 问题描述&#xff1a; python哪个版本最稳定好用 解决方案&#xff1a; 目前&#xff0c;Python 的最新版本是 3.11.0。然而&#xff0c;对于大多数用户来说&#xff0c;Python 3.8 和 3.9 是最稳定和好用的版本&#xff0c;因为它们…

8:00面试,8:06就出来了,问的问题有点变态。。。

从小厂出来&#xff0c;没想到在另一家公司又寄了。 到这家公司开始上班&#xff0c;加班是每天必不可少的&#xff0c;看在钱给的比较多的份上&#xff0c;就不太计较了。没想到9月一纸通知&#xff0c;所有人不准加班&#xff0c;加班费不仅没有了&#xff0c;薪资还要降40%…

鸿蒙Harmony应用开发—ArkTS声明式开发(基础手势:TextPicker)

滑动选择文本内容的组件。 说明&#xff1a; 该组件从API Version 8开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。 子组件 无 接口 TextPicker(options?: {range: string[] | string[][] | Resource | TextPickerRangeContent[] | Te…

数据可视化实战(二)

将每个城市在每个月份平均PM2.5绘制成折线图 import pandas as pd import matplotlib.pyplot as plt df pd.read_excel(./PM2.5.xlsx)display(df.head(10)) df.shape # (161630, 15)城市年份月份日期小时季节PM2.5露点湿度压强温度风向累计风速降水量累计降水量0北京2010112…

酒店管理系统|基于Spring Boot框架+ Mysql+Java+ B/S结构的酒店管理系统设计与实现(可运行源码+数据库+设计文档)

推荐阅读100套最新项目 最新ssmjava项目文档视频演示可运行源码分享 最新jspjava项目文档视频演示可运行源码分享 最新Spring Boot项目文档视频演示可运行源码分享 2024年56套包含java&#xff0c;ssm&#xff0c;springboot的平台设计与实现项目系统开发资源&#xff08;可…

【鸿蒙HarmonyOS开发笔记】动画过渡效果之组件内转场动画,内含ForEach动画

概述 我们在开发中难免设计组件的插入、删除过程。通过组件内转场动画&#xff0c;可定义组件出现、消失的效果。 组件内转场动画的接口为&#xff1a; transition(value: TransitionOptions)transition函数的入参为组件内转场的效果&#xff0c;可以定义平移、透明度、旋转…