Strategy 模式

2023-05-16

enum TaxBase {
	CN_Tax,
	US_Tax,
	DE_Tax,
};
class SaleOrder {
	TaxBase tax;
public:
	if(tax == CN_Tax) {
	//....
	}
	else if (tax == US_Tax) {
		//....
	}
	else if (tax == DE_Tax)
	{
		//....
	}
	//.......
};
//如果加个法国税款,则需改写枚举类型,改写类内方法,打破了类的复用性  绝对不变的可以用if else,如果场景或者业务变换

class TaxStrategy {
public:
	virtual double Calculate(const Context& context)=0;
	virtual ~TaxStrategy() {}

};
class CNTax :public TaxStrategy {
public:
	virtual double Calculate(Context& context)
	{
		//......
	}
};
class USTax :public TaxStrategy {
public:
	virtual double Calculate(Context& context) {
	//...
	}
};
class DETax :public TaxStrategy {
public:
	virtual double Calculate(Context& context) {
		//....
	}
};

class SaleOrder {
	TaxStrategy *strategy;
public:
	SaleOrder(StrategyFactory* strategy) {               //不知道是哪国税款,工厂模式未学
		this->strategy = strategyFactory->NewStrategy();
	}
	~SaleOrder() {
		delete this->strategy;
	}
public: 
	double CalculateTax() {
		Context context();

		double val = strategy->Calculate(context);
		//....
	}
};

//假如加个法国税款 只需扩展一个类
class FRTax :public TaxStrategy {
public:
	virtual double Calculate(Context& context) {
		//....
	}
};


 

 

 红圈圈起来是指稳定不变的 左边中的Contex相当于saleorder.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Strategy 模式 的相关文章

  • MAC OS命令行使用详解

    原文地址 xff1a http www renfei org blog mac os x terminal 101 html 最近学习苹果认证的 Mac OS X Support Essentials 教程 xff0c 看到 Command
  • 理论: 图论(14):最大强连通图算法 tarjan

    最大强连通图定义 在有向图G中 xff0c 如果两个顶点间至少存在一条路径 xff0c 称两个顶点强连通 strongly connected 如果有向图G的每两个顶点都强连通 xff0c 称G是一个强连通图 非强连通图有向图的极大强连通子
  • 手机开发之三:CoreApp的深入分析

    四 xff0e CoreApp的深入分析 目前参考代码里面的CoreApp所完成的工作比较多且杂 xff0c 主要说来有如下几件事 a 系统组件初始化 xff1b b 开机Logo的显示 xff1b c Sim卡检测和Pin码校验 xff1
  • 阿里云上运行rabbitmq docker镜像无法远程访问rabbitmq management

    原连接https blog csdn net u012884074 article details 87346960
  • Maven+Mybatis实现数据库增删改查

    Maven 43 Mybatis实现数据库增删改查 1 新建一个普通的Maven项目 xff0c 在pom xml导入maven依赖 2 创建一个模块 在mybatis config xml编写mybatis的核心配置文件3 编写mybat
  • Redis 本身有持久化,为什么还要写进 MySQL?

    权限控制 MySQL 有权限控制 xff0c 用户可以精确到每个 IP 的每个账户 xff0c 目标可以精确到每个表的每个操作 Redis 则是天生设计成完全开放权限 xff0c 包括完全删除数据库的操作 xff0c 任何人都可以执行 要么
  • Jetpack学习-6-Viewbinding使用及简单分析

    Jetpack可以帮助开发者减少样板代码 而findviewbyId正是需要减少的样板代码 于是就有了ViewBinding 一开始我细看Jetpack的各个组件我是懵的 里面没有ViewBinding 这不好把它归纳到Jetpack系列中
  • PC版微信  网络不可用,请检查你的网络设置 的解决方法

    PC版微信 网络不可用 xff0c 请检查你的网络设置 的解决方法 win10上安装的电脑版微信总是提示 网络不可用 xff0c 请检查你的网络设置 xff0c 接收信息慢 xff0c 而且发送文件和图片都不成功 xff0c 严重影响办公
  • 关于系统属性设置Settings.System.putString

    1 System getProperties setProperty 34 aaa 34 34 true 34 这种设置在本应用中可以拿的到值 xff0c 但在其它应用中得到的为null 2 Settings System putStrin
  • fota升级总结

    一 FAQ12481 Recovery mode在cache recovery目录下新建一支文件 xff0c 重启后 xff0c 新建文件消失了 DESCRIPTION 1 在recovery cpp文件的最后新建一支文件 cache re
  • Android.mk 中copy文件

    LOCAL PATH 61 call my dir include CLEAR VARS LOCAL MODULE TAGS 61 optional LOCAL STATIC JAVA LIBRARIES 61 libarity andro
  • android persist属性使用

    persit属性 1 设置前缀 在system core init property service c中定义的前缀 xff0c 并设置了权限 2 添加一个property并加上默认属性 xff1a 例如 xff1a silvan liu
  • svn checkout 忽略某个文件夹

    android源码更新时 frameworks compile slang tests P str escape 报错 xff1a Error 39 str escape rs 39 is not valid as filename in

随机推荐

  • android udp

    Android之Socket的基于UDP传输 接收方创建步骤 xff1a 1 创建一个DatagramSocket对象 xff0c 并指定监听的端口号 DatagramSocket socket 61 new DatagramSocket
  • 使用UncaughtExceptionHandler保存全局异常(转)

    From https blog csdn net dreamintheworld article details 43669027 网上关于安卓开发过程中出现的异常捕抓问题已经讲得非常透彻了 xff0c 现在为自己总结一下使用Uncaugh
  • Android SnappyDB

    https blog csdn net qq 21430549 article details 50864502 1 前言 在以前的博客当中 xff0c 有提到数据缓存的方案 xff0c 那么问题来了 xff0c 我们难以避免的使用数据库去
  • Python中文件操作相关总结

    Python文件操作 span class token keyword with span span class token builtin open span span class token punctuation span span
  • 2011年总结

    又是一年年终时 亦是一年总结时 想想自己从去年写年终总结到现在 已经很久没有写过字了 时间过得真快 又是一年过去了 这一年也是我出来工作的第二年 这一年总体来说自己无论在技术还是心态方面有了很大的进步 记得刚出学校那会 啥都不知道 对于工作
  • IE 8 HTML Parsing Error:Unable to modify the parent container element before the child element is cl

    一 错误信息提示 IE8下 消息 HTML Parsing Error Unable to modify the parent container element before the child element is closed KB9
  • MATLAB程序设计之循环结构入门详解

    一 引言 Matlab可以类似C C 43 43 语言或者Python语言一样可以编写程序以完成某些功能 Matlab程序包含三大程序结构 xff0c 分别是顺序结构 选择结构和循环结构 本文主要给出了Matlab程序的循环结构的语法规则及
  • Python的循环结构

    一 循环结构 在Python中有两种循环结构 xff0c 一种是 for in 循环 xff0c 另一种是 while 循环 1 for in 循环 xff1a xff08 1 xff09 主要用于计数的功能 例1 xff1a 用for循环
  • 如何在Windows cmd上递归删除文件或文件夹?批量删除指定大小的图片文件

    如何在Windows cmd上递归删除文件或文件夹 xff1f span class token keyword for span r R span class token keyword in span span class token
  • 向量叉乘

    向量叉乘公式以及推导 xff1a 向量叉乘几何意义 xff1a 在三维几何中 xff0c 向量a和向量b的叉乘结果是一个向量 xff0c 该向量垂直于a和b向量构成的平面 xff0c 该向量也被称作法向量 向量叉乘运用 xff1a 在三维模
  • GTK2.0+学习

    GTK2 0 43 学习 1 准备 首先观察gtk2 0 开发包为我们提供的一个文档 阅读下文 xff0c 您可以知道 xff0c 对于刚开始开发 xff0c 我们应该做些什么 Then add the bin folder to your
  • KVM详解,太详细太深入了,经典

    KVM 介绍 xff08 1 xff09 xff1a 简介及安装 http www cnblogs com sammyliu p 4543110 html 学习 KVM 的系列文章 xff1a xff08 1 xff09 介绍和安装 xff
  • 【详解】dependencyManagement和dependencies区别和联系

    通常工程比较庞大 xff0c 模块多的时候 xff0c 在pom xml文件中 xff0c 也就是父依赖中会看到dependencyManagement标签 这个标签的作用是 xff1a 对项目所依赖jar包进行版本管理的管理器 使用pom
  • Java8 stream 返回有序的map集合

    Collectors toMap 需要返回有序的map集合 LinkedHashMap 我是用stream遍历数据的时候 最后需要返回有序的Map集合 即 LinkedHashMap 但是我看到Collectors里面并没有返回Linked
  • Ubuntu初始系统需要安装的包

    span class token comment 安装ssh模块 span span class token function sudo span span class token function apt get span span cl
  • libgtk2.0-dev : Depends: libgtk2.0-0 (= 2.24.30-1ubuntu1) but 2.24.30-1ubuntn

    代码中调用cv2 imshow 指令时报错 xff0c 提示 cv2 error OpenCV 4 1 1 io opencv modules highgui src window cpp 627 error 2 Unspecified e
  • 0805封装尺寸/0402封装尺寸/0603封装尺寸/1206封装尺寸

    电子元器件 封装尺寸与功率关 系 xff1a 02011 20W 04021 16W 06031 10W 08051 8W 12061 4W 封装尺寸与封装的 对应关 系 0402 61 1 0mmx0 5mm 0603 61 1 6mmx
  • PTA 7-20 表达式转换 (25分)

    算术表达式有前缀表示法 中缀表示法和后缀表示法等形式 日常使用的算术表达式是采用中缀表示法 xff0c 即二元运算符位于两个运算数中间 请设计程序将中缀表达式转换为后缀表达式 输入格式 输入在一行中给出不含空格的中缀表达式 xff0c 可包
  • Template Mode(模板方法)

    结构化程序 程序库开发人员 class Library public void step1 void step3 void step5 应用程序开发人员 class Application piblic bool Step2 bool St
  • Strategy 模式

    enum TaxBase CN Tax US Tax DE Tax class SaleOrder TaxBase tax public if tax 61 61 CN Tax else if tax 61 61 US Tax else i