当前位置: 首页 > article >正文

简单工程模式

代码实现 
//simpleFactory.h
#ifndef _SimpleFactory_H_
#define _SimpleFactory_H_

#include <iostream>
#include <exception>
#include <string>

using namespace std;

class Operation {
protected:
    double _numberA = 0;
    double _numberB = 0;
public:
    Operation() {}
    Operation(double a, double b) {
        _numberA = a;
        _numberB = b;
    }
    Operation& operator=(Operation& p) {
        _numberA = p.getNumberA();
        _numberB = p.getNumberB();
    }
    double getNumberA() {
        return _numberA;
    }
    void setNumberA(double value) {
        _numberA = value;
    }
    double getNumberB() {
        return _numberB;
    }
    void setNumberB(double value) {
        _numberB = value;
    }
    virtual double GetResult() {
        return 0;
    }
};
class OperationAdd :public Operation {
    double GetResult() {
        double result = 0;
        result = _numberA + _numberB;
        return result;
    }
};
class OperationSub :public Operation {
    double GetResult() {
        double result = 0;
        result = _numberA - _numberB;
        return result;
    }
};
class OperationMul :public Operation {
    double GetResult() {
        double result = 0;
        result = _numberA * _numberB;
        return result;
    }
};
class OperationDiv :public Operation {
    double GetResult() {
        double result = 0;
        try {
            result = _numberA / _numberB;
        }
        catch (exception&) {
            cout << "发生除0异常" << endl;
        }
        return result;
    }
};
class OperationFactory {
public:
    static Operation* createOperation(char operate) {
        Operation* oper;
        switch (operate) {
        case '+':
            oper = new OperationAdd();
            break;
        case '-':
            oper = new OperationSub();
            break;
        case '*':
            oper = new OperationMul();
            break;
        case '/':
            oper = new OperationDiv();
            break;
        }
        return oper;
    }
};
#endif //_SimpleFactory_H_

UML图

总结

可以发现,简单工厂类是制造运算类的对象的,并且只需要传递关键参数给简单工厂类的方法(通常为静态方法),就可以创造出相应的对象出来。
故简单工厂适用于工厂类负责创建的对象较少的场景,且客户端只需要传入工厂类的参数,对于如何创建对象不需要关心。

收获

1.可以通过封装、继承、多态把程序的耦合度降低。
2.可以通过设计模式使程序变得更加灵活,易于修改,并且易于复用。
3.简单工厂模式适用创建对象少的情况,需要传参来指定需要的对象(产品)。


http://www.kler.cn/a/136015.html

相关文章:

  • 智慧商城:购物车模块基本静态结构 + 构建vuex cart模块,获取数据存储(异步actions)
  • gitee给DeployKey添加push权限
  • 【C#】Ctrl+ 组合键的使用
  • [LeetCode-Python版] 定长滑动窗口1(1456 / 643 / 1343 / 2090 / 2379)
  • 如何正确地安装和设置魔方财务软件?
  • EGO Swarm翻译
  • 目标检测YOLO实战应用案例100讲-基于改进YOLOv5s的道路目标检测
  • Debian系列的Linux发行版上部署wvp
  • C语言--每日五道选择题--Day20
  • el-table 对循环产生的空白列赋默认值
  • 论文笔记:The Impact of AI on Developer Productivity:Evidence from GitHub Copilot
  • 怎么在echarts图上左右滑动切换数据区间
  • Flutter在web项目中使用iframe
  • html主页框架,前端首页通用架构,layui主页架构框架,首页框架模板
  • 设计原则 | 开放封闭原则
  • LeetCode【92】翻转链表II
  • 将Excel中的数据导入shell脚本
  • 用java编写图书管理系统
  • HDCTF2023 - Reverse方向全WP
  • 在Oracle 11g 数据库上设置透明数据加密(TDE)
  • 【SpringCloud】Eureka基于Ribbon负载均衡的调用链路流程分析
  • BLIP-2:冻结现有视觉模型和大语言模型的预训练模型
  • C#具名参数(Named Parameters)
  • Ubuntu下发送邮件
  • C#编程题分享(1)
  • 【亚马逊云科技产品测评】活动征文|aws云服务器 + 微服务Spring Cloud Nacos 实战