策略模式和简单工厂模式的结合:把分支判断放到环境角色中。

解决简单工厂模式中提到的问题:
●关键:分支的switch依然去不掉
●解决方法:依赖注入、反射、XML
简单工厂模式
策略模式

收银软件的策略模式+简单工厂模式实现代码及UML图

package Cash;public abstract class CashSuper {public abstract double acceptCash(double money);
}
============================================
package Cash;public class CashNormal extends CashSuper {正常收费,原价返回@Overridepublic double acceptCash(double money) {return money;}}
===================================================
package Cash;public class CashRebate extends CashSuper {////打折收费,初始化时,必需要输入折扣率,如八折,就是0.8private double moneyRebate=1;public CashRebate(double moneyRebate){this.moneyRebate=moneyRebate;}@Overridepublic double acceptCash(double money) {return money*moneyRebate;}}
==================================================
package Cash;public class CashReturn extends CashSuper {//返利收费,初始化时必需输入返利条件和返利值,比如满300返100,则moneyCondition为300,moneyReturn为100private double moneyCondition=0.0;private double moneyReturn=0.0;public CashReturn(double moneyCondition,double moneyReturn){this.moneyCondition=moneyCondition;this.moneyReturn=moneyReturn;}@Overridepublic double acceptCash(double money) {double result=money;if(money>=moneyCondition)result=money-Math.floor(money/moneyCondition)*moneyReturn;return result;}}
============================================
package Cash;
//策略与简单工厂模式结合
public class CashContextTwo {CashSuper cs=null;public   CashContextTwo(String type){switch(type){case "正常收费":CashNormal cs1=new CashNormal();cs=cs1;break;case "满300返100":CashReturn cs2=new CashReturn(300,100);cs=cs2;break;case "打8折":CashRebate cs3=new CashRebate(0.8);cs=cs3;break;}}public double GetResultTwo(double money){return cs.acceptCash(money);}}
===========================================
package Cash;
//策略与简单工厂模式结合
public class ClientTwo {public static void main(String[] args) {// TODO Auto-generated method stubdouble money=1000;String type="满300返100";CashContextTwo context=new CashContextTwo(type);double result=context.GetResultTwo(money);System.out.println(result);}}

策略与简单工厂模式结合的实现--收银软件的代码及UML图相关推荐

  1. python打折简单程序每满_[Python设计模式] 第2章 商场收银软件——策略模式

    题目 设计一个控制台程序, 模拟商场收银软件,根据客户购买商品的单价和数量,计算总价. 基础版本 price = float(input("输入商品单价:")) number = ...

  2. 设计模式C#描述之——简单工厂模式、抽象工厂模式、单例与多例模式

    设计模式C#描述之--简单工厂模式 前 言:设计模式是软件开发领域的精髓之一.学好设计模式是目前每一个开发人员的必修课.目前关于设计模式的书很多,其中比较好的有GOF那本的中译本,但并 不很适合初学者 ...

  3. 简单工厂模式、工厂方法模式、抽象工厂模式

    2019-11-12 参考大话数据结构 假设我们要解决一个问题:编程实现一个计算器 用面向过程的思想,很容易想到,首先输入两个操作数,再判断运算符进行运算,输出结果即可,但是这样的代码很难维护,我们需 ...

  4. Java设计模式之简单工厂模式实验(软件工程综合实践课程第二周)

    实验目的 1 .理解软件设计的相关理论 : 2 .理解面向对象设计原则: 实验内容 1 .简单工厂模式实验: (1) 参考讲义上的代码,利用简单工厂模式完成计算器应用程序: (2) 画出计算器程序简单 ...

  5. 简单工厂模式-工厂方法模式

    文章目录 1 简单工厂模式 1.1 类的结构图 1.2 代码实现 2 工厂方法模式 2.1 定义 2.2 类的结构图 2.3 代码实现 1 简单工厂模式 1.1 类的结构图 1.2 代码实现 pack ...

  6. C++简单工厂模式详解

    C++简单工厂模式详解 1.问题引入 2.编写代码思路的迭代 2.1 main函数主体内编写全部代码 2.2 修改上述问题后的main函数代码 2.3 引入面向对象后的代码 2.4 加上继承和多态后的 ...

  7. 设计模式 学习笔记(1)简单工厂模式、策略模式

    1.简单工厂模式 用一个单独的类来做创造实例的过程. public class OperationFactory{ public static Operation createOperate(stri ...

  8. 策略模式与简单工厂模式区别(转)

    最近一直在抽时间研究设计模式,之前对设计模式也有一定的了解,但是都没有平心静气的去研究过,只是了解了一些皮毛,最近打算再深入研究一下,重新打开了设计模式的数据,对之前的疑问一个个的刨根问底,今天看了简 ...

  9. 设计模式(1)--简单工厂模式、策略模式

    设计模式(1)--简单工厂模式.策略模式 1. 简单工厂模式 在阎宏博士的<JAVA与模式>一书中开头是这样描述简单工厂模式的:简单工厂模式是类的创建模式,又叫做静态工厂方法(Static ...

最新文章

  1. 在Android中进行单元测试遇到的问题
  2. 马上要毕业了,要就业了。。担忧啊
  3. PHP未定义名称的方法,PHP:“调用未定义的方法”......但方法是否已定义?
  4. JVM — 类加载机制
  5. Apache应用实例:建立yum服务器
  6. 排序算法之选择排序(简单选择排序、堆排序)
  7. Android FrameWork——ActivityManager框架
  8. 仿苹果涂鸦软件_ipad平板电脑有哪些绘画软件?
  9. php/html+css+js制作计算器
  10. 计量经济学知识点及案例整理
  11. 表的增删改查(一)(MySQL)
  12. JavaScript|表格背景颜色改变页面
  13. 中国大学MOOC C语言程序设计--第四周编程题
  14. 动态红包封面来了,特效拉满超炫酷
  15. Electron学习笔记(五) 通过Addon(n-api)实现可扩展接口
  16. GNN、GCN、GAT关系
  17. 输入一个字符串,判断其是否是回文。(回文:即正读和反读都一样,如abccba, abccba)
  18. 2.浅浅体验Python编程
  19. libpng error: iTXt: chunk data is too large error: PNG unsigned integer out of range
  20. java toast_详解Android中的Toast源码

热门文章

  1. vue项目导出Excel表格
  2. 从小白进阶成为大lao,java学习5大阶段
  3. 如何在jsp里面定义方法
  4. 电脑为什么会关机重起
  5. 下载文件safari会变成.exe
  6. 「GoCN酷Go推荐」简单易用的性能分析工具——nitro
  7. 把raw里的文件复制到SD卡中
  8. 优酷等视频网站的视频怎么下载
  9. python控制代码块逻辑关系_Python 编程中用代码缩进表示逻辑递进关系,通常用几个空格_学小易找答案...
  10. 怎么用matlab编写quad8算法,quad8 是 matlab 中调用( )公式的命令