首页 > 其他分享 >简单工厂模式

简单工厂模式

时间:2024-09-16 09:24:05浏览次数:7  
标签:dMoneyCondition return double AcceptCash dMoney 工厂 模式 简单 public

1. 案例:营业员根据客户所购买商品的单价和数量,根据不同活动向客户收费

- 正常原价收费
- 八折收费
- 满300返100

2. 简单工厂模式结构

- 抽象产品(Abstract Product):具体产品类的基类,包含创建产品的公共方法

enum CashType
{
    NORMAL = 0,
    REBATE,
    RETURN
};

class CashSuper
{
public:
    virtual double AcceptCash(double dMoney) = 0;
};

- 具体产品(Concrete Product):抽象产品的派生类,包含具体产品特有的实现方法,是简单工厂模式的创建目标

class CashNormal :
    public CashSuper
{
public:
    // 通过 CashSuper 继承
    double AcceptCash(double dMoney) override;
};

double CashNormal::AcceptCash(double dMoney)
{
    return dMoney;
}
class CashRebate :
    public CashSuper
{
public:
    CashRebate(double dMoneyRebate);
    // 通过 CashSuper 继承
    double AcceptCash(double dMoney) override;
private:
    double m_dMoneyRebate;
};

CashRebate::CashRebate(double dMoneyRebate):
    m_dMoneyRebate(dMoneyRebate)
{
}

double CashRebate::AcceptCash(double dMoney)
{
    return dMoney * m_dMoneyRebate;
}
class CashReturn :
    public CashSuper
{
public:
    CashReturn(double dMoneyCondition, double dMoneyReturn);
    // 通过 CashSuper 继承
    double AcceptCash(double dMoney) override;
private:
    double m_dMoneyCondition;
    double m_dMoneyReturn;
};

CashReturn::CashReturn(double dMoneyCondition, double dMoneyReturn):
    m_dMoneyCondition(dMoneyCondition), m_dMoneyReturn(dMoneyReturn)
{
}

double CashReturn::AcceptCash(double dMoney)
{
    if (fabs(m_dMoneyCondition) < 1e-6)
        return dMoney;
    return dMoney - floor(dMoney / m_dMoneyCondition) * m_dMoneyReturn;
}

- 工厂(Factory):根据客户提供的具体产品类的参数,创建具体产品实例

class CashFactory
{
public:
    static std::shared_ptr<CashSuper> CreatCashOperation(CashType eCashType);
};

std::shared_ptr<CashSuper> CashFactory::CreatCashOperation(CashType eCashType)
{
    switch (eCashType)
    {
    case NORMAL:
        return std::make_shared<CashNormal>();
        break;
    case REBATE:
        return std::make_shared<CashRebate>(0.8);
        break;
    case RETURN:
        return std::make_shared<CashReturn>(300.0, 100.0);
        break;
    default:
        return std::make_shared<CashNormal>();
        break;
    }
}

 

标签:dMoneyCondition,return,double,AcceptCash,dMoney,工厂,模式,简单,public
From: https://www.cnblogs.com/BoYuCG/p/18415992

相关文章

  • CTF——简单的《MICS》
    文章目录一、MICS1、MISC-LSB2、MISC-循环解压3、MISC-一个不同的压缩包4、MISC-异性相吸5、MISC-仔细找找6、MISC-再来一题隐写7、MISC-找找吧8、MISC-这是一张单纯的图片9、MISC-真假flag10、MISC-真正的黑客才可以看到本质11、MISC-追象者12、MICS-鸡蛋别放在一起......
  • 2024CSP-J初赛全真模拟卷选择题篇(原创,难度偏简单)
    注意,本卷由再临TSC原创,禁止转载!本卷难度偏简单,若想要通过初赛本卷应拿80+分左右查看答案的方法:if(设备=="PC"){    把光标移到答案上面,选中答案,就会显示();}elseif(设备==移动端b||设备==平板){    把答案复制,找到随便一个地方粘贴即可();}else{......
  • 简单概述互联网模型
    互联网的五层模型越下面的层,越靠近硬件;越上面的层,越靠近用户。应用层传输层网络层连接层实体层一、实体层规定:电脑与电脑的连接方式,如光缆、电缆、双绞线、无线电波等,以及电气特性。二、链接层规定:信号0和1的个数,排列方式和分组以太网:一个数据包分为,标头和数据......
  • C语言一些简单的细节记录
    一、声明和定义的区别1.声明(Declaration):是告诉编译器有一个变量、函数或类型存在,但不为其分配内存或提供具体的实现。声明提供了有关标识符(如变量名、函数名)的信息,包括类型和名称。它们通常在头文件中出现,以便在多个源文件中共享。例如,以下是变量、函数和类型的声明示例:......
  • Android中的单例模式
    在Android开发中,单例模式(SingletonPattern)是一种常用的设计模式,它确保一个类只有一个实例,并提供一个全局访问点来获取这个实例。单例模式在需要控制资源访问、管理共享资源或配置信息的场景下特别有用。在Android中,实现单例模式的方法有多种,但主要思想是一致的:私有化构造函数,......
  • 探索鸿蒙应用开发中的沉浸式模式与安全区域文字颜色
    在鸿蒙应用开发中,实现沉浸式显示模式与改变安全区域文字颜色可以为用户带来更加流畅和美观的视觉体验,本文将详细介绍如何在鸿蒙应用中实现特定页面的沉浸式显示,以及在这个过程中遇到的问题和解决方案。效果展示开启沉浸式模式关闭沉浸式模式改变安全区域文字颜色一、......
  • Python编写简单登录系统的完整指南
    在现代应用中,用户认证和登录系统是一个非常重要的功能。通过登录系统,应用能够识别用户的身份,并为其提供相应的权限和服务。本文将介绍如何使用Python编写一个简单的登录系统,包括用户注册、登录验证、密码加密等功能。通过这一教程,将学习如何构建一个基本的用户登录系统,并理解其......
  • C# 设计模式:适配器模式(Adapter Pattern)
    摘要适配器模式是一种结构型设计模式,它允许不兼容的接口之间能够相互合作。这种模式涉及到一个单独的类,它负责加入独立的或不兼容的接口功能。简单来说,适配器模式就是一个中间件,它使得原本由于接口不兼容而不能一起工作的类可以一起工作。正文应用场景适配器模式通常应用于以下情况......
  • java常见设计模式
      Java设计模式是经过验证的、用于解决常见软件设计问题的标准化解决方案。设计模式可以分为三大类:创建型模式、结构型模式和行为型模式。以下列出一些常见的设计模式,并附上每个模式的简单说明和Java示例。 1.单例模式(SingletonPattern)-创建型模式目的......
  • Unity设计模式(1) FSM有限状态机
    有限状态机(FSM)的核心原理是基于状态和状态之间的转换。它可以用来描述系统的行为和流程,尤其是在处理离散事件和复杂逻辑时使代码有较强的可维护性及健壮性。为什么使用状态机在一开始学习程序的时候,你可能会陷入一种误区,就是想把所有事情全在一个脚本里给干了,可是当你需要在......