




已阅读5页,还剩3页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
/blog/631241Java代码 1. /* 2. *策略模式 3. *QS:做个商场收银软件,营销员根据客户所购买的商品和数量向客户收费第一次程序 4. *authorxangqun 5. * 6. */7. publicclassProgram 8. 9. /* 10. *PS: 11. *如果商场搞活动,商品打8折,打5折怎么办? 12. *paramargs 13. *throwsIOException 14. */15. publicstaticvoidmain(Stringargs)throwsIOException 16. System.out.println(单价:); 17. StringstrA=newBufferedReader(newInputStreamReader(System.in) 18. .readLine(); 19. System.out.println(数量:); 20. StringstrB=newBufferedReader(newInputStreamReader(System.in) 21. .readLine(); 22. doublenumberd=Double.valueOf(strA)+Double.valueOf(strB); 23. System.out.println(价格为:+numberd); 24. 25. 26. 27. /* * 策略模式 * QS:做个商场收银软件,营销员根据客户所购买的商品和数量向客户收费 第一次程序 * author xangqun * */public class Program /* *PS: * 如果商场搞活动,商品打8折,打5折怎么办? * param args * throws IOException */public static void main(String args) throws IOException System.out.println(单价:);String strA = new BufferedReader(new InputStreamReader(System.in).readLine();System.out.println(数量:);String strB = new BufferedReader(new InputStreamReader(System.in).readLine();double numberd = Double.valueOf(strA) + Double.valueOf(strB);System.out.println(价格为: + numberd);Java代码 1. /* 2. *策略模式 3. *QS:做个商场收银软件,营销员根据客户所购买的商品和数量向客户收费第一次程序 4. *authorxangqun 5. *改进的程序1 6. */7. publicclassProgramTwo 8. 9. /* 10. *PS:3个分支执行的语句除了打折不一样外几乎没什么不同应该考虑重构下 11. *paramargs 12. *throwsIOException 13. * 14. */15. publicstaticvoidmain(Stringargs)throwsIOException 16. 17. System.out.println(单价:); 18. StringstrA=newBufferedReader(newInputStreamReader(System.in) 19. .readLine(); 20. System.out.println(数量:); 21. StringstrB=newBufferedReader(newInputStreamReader(System.in) 22. .readLine(); 23. System.out.println(折扣:); 24. StringstrC=newBufferedReader(newInputStreamReader(System.in) 25. .readLine(); 26. intnumc=Integer.valueOf(strC); 27. doubleresult=0; 28. switch(numc) 29. case1:result=Double.valueOf(strA)+Double.valueOf(strB);break; 30. case2:result=(Double.valueOf(strA)+Double.valueOf(strB)*0.8;break; 31. case3:result=(Double.valueOf(strA)+Double.valueOf(strB)*0.5;break; 32. 33. System.out.println(result); 34. /* * 策略模式 * QS:做个商场收银软件,营销员根据客户所购买的商品和数量向客户收费 第一次程序 * author xangqun * 改进的程序1 */public class ProgramTwo /* * PS:3个分支执行的语句除了打折不一样外几乎没什么不同应该考虑重构下 * param args * throws IOException * */public static void main(String args) throws IOException System.out.println(单价:);String strA = new BufferedReader(new InputStreamReader(System.in).readLine();System.out.println(数量:);String strB = new BufferedReader(new InputStreamReader(System.in).readLine(); System.out.println(折扣:); String strC = new BufferedReader(new InputStreamReader(System.in).readLine(); int numc= Integer.valueOf(strC); double result = 0; switch(numc) case 1:result=Double.valueOf(strA) + Double.valueOf(strB);break; case 2:result=(Double.valueOf(strA) + Double.valueOf(strB)*0.8;break; case 3:result=(Double.valueOf(strA) + Double.valueOf(strB)*0.5;break; System.out.println(result);Java代码 1. publicabstractclassCashSuper 2. 3. publicabstractdoubleacceptCash(doublemoney); 4. public abstract class CashSuper public abstract double acceptCash(double money);Java代码 1. publicclassCashNormalextendsCashSuper 2. 3. Override4. publicdoubleacceptCash(doublemoney) 5. 6. returnmoney; 7. 8. 9. public class CashNormal extends CashSuper Overridepublic double acceptCash(double money) return money;Java代码 1. publicclassCashRebateextendsCashSuper 2. 3. privatedoublemoneyRebate=1d; 4. publicCashRebate() 5. publicCashRebate(StringmoneyRebate) 6. this.moneyRebate=Double.valueOf(moneyRebate); 7. 8. Override9. publicdoubleacceptCash(doublemoney) 10. returnmoney*moneyRebate; 11. 12. 13. public class CashRebate extends CashSuper private double moneyRebate=1d;public CashRebate()public CashRebate(String moneyRebate)this.moneyRebate=Double.valueOf(moneyRebate);Overridepublic double acceptCash(double money) return money*moneyRebate;Java代码 1. publicclassCashReturnextendsCashSuper 2. 3. privatedoublemoneyCondition=0.0d; 4. privatedoublemoneyReturn=0.0d; 5. publicCashReturn() 6. publicCashReturn(doublemoneyCondition,doublemoneyReturn) 7. this.moneyCondition=moneyCondition; 8. this.moneyReturn=moneyReturn; 9. 10. Override11. publicdoubleacceptCash(doublemoney) 12. doubleresult=money; 13. if(moneymoneyCondition) 14. result=money-Math.floor(money/moneyCondition)*moneyReturn; 15. 16. returnresult; 17. 18. 19. public class CashReturn extends CashSuper private double moneyCondition=0.0d;private double moneyReturn=0.0d;public CashReturn()public CashReturn(double moneyCondition,double moneyReturn)this.moneyCondition=moneyCondition;this.moneyReturn=moneyReturn;Overridepublic double acceptCash(double money) double result=money;if(moneymoneyCondition)result=money-Math.floor(money/moneyCondition)*moneyReturn;return result;Java代码 1. publicclassCashFactory 2. 3. publicstaticCashSupercreateCashAccept(inttype) 4. CashSupercs=null; 5. switch(type) 6. case1:cs=newCashNormal();break; 7. case2:cs=newCashReturn(300,100);break; 8. case3:cs=newCashRebate(0.8);break; 9. 10. returncs; 11. 12. public class CashFactory public static CashSuper createCashAccept(int type)CashSuper cs=null;switch(type)case 1:cs=new CashNormal();break;case 2: cs=new CashReturn(300,100);break;case 3:cs=new CashRebate(0.8);break;return cs;Java代码 1. /* 2. *策略模式 3. *QS:做个商场收银软件,营销员根据客户所购买的商品和数量向客户收费第一次程序 4. *authorxangqun 5. *改进的程序2(采用简单工厂模式) 6. */7. publicclassProgramThree 8. 9. /*PS: 10. *简单工厂模式只是解决对象的创建问题,面对算法时常变动应该考虑用其他方法 11. *paramargs 12. *throwsIOException 13. */14. publicstaticvoidmain(Stringargs)throwsIOException 15. System.out.println(单价:); 16. StringstrA=newBufferedReader(newInputStreamReader(System.in) 17. .readLine(); 18. System.out.println(数量:); 19. StringstrB=newBufferedReader(newInputStreamReader(System.in) 20. .readLine(); 21. 22. CashSupercs=CashFactory.createCashAccept(1); 23. doubletotalprices=0d; 24. totalprices=cs.acceptCash(Double.valueOf(strA)*Double.valueOf(strB); 25. System.out.println(totalprices); 26. 27. 28. /* * 策略模式 * QS:做个商场收银软件,营销员根据客户所购买的商品和数量向客户收费 第一次程序 * author xangqun * 改进的程序2(采用简单工厂模式) */public class ProgramThree /*PS: * 简单工厂模式只是解决对象的创建问题,面对算法时常变动应该考虑用其他方法 * param args * throws IOException */public static void main(String args) throws IOException System.out.println(单价:);String strA = new BufferedReader(new InputStreamReader(System.in).readLine();System.out.println(数量:);String strB = new BufferedReader(new InputStreamReader(System.in).readLine();CashSuper cs=CashFactory.createCashAccept(1);double totalprices=0d;totalprices=cs.acceptCash(Double.valueOf(strA)*Double.valueOf(strB);System.out.println(totalprices);Java代码 1. publicclassCashContext 2. 3. privateCashSupercs; 4. publicCashContext(CashSupercsuper) 5. this.cs=csuper; 6. 7. publicdoublegetResult(doublemoney) 8. returncs.acceptCash(money); 9. 10. public class CashContext private CashSuper cs;public CashContext(CashSuper csuper)this.cs=csuper;public double getResult(double money)return cs.acceptCash(money);Java代码 1. /* 2. *策略模式 3. *QS:做个商场收银软件,营销员根据客户所购买的商品和数量向客户收费第一次程序 4. *authorxangqun 5. *改进的程序3(采用策略模式) 6. */7. publicclassProgramFour 8. 9. /*策略模式(strategy) 10. *它定义了算法家族,分别封装起来,让他们之间可以相互替换,此模式让算法的变化不会影响到使用算法的客户 11. *策略模式是一种定义一系列算法的方法,从概念上来看,所以这些算法完成的都是相同的工作,只是实现不同,他可以 12. *以相同的方式调用所有的算法,减少了各种算法类与使用算法类之间的耦合。 13. *优点:1.context定义了一系列的可供重用的算法或行为,继承有助于析取出这些算法中公共功能(这里是getresult) 14. *2.简化了单元测试因为每个算法都有自己的类,可以通过自己的接口单独测试 15. *策略模式封装了变化 16. *应用:策略模式就是用来封装算法的,但实践中,我们发现可以用他来封装几乎任何类型的规则,只要在分析过程中 17. *听到需要在不同时间应用不同的业务规则,就可以考虑使用策略模式处理这种变化的可能性 18. *paramargs 19. *throwsIOException 20. */21. publicstaticvoidmain(Stringargs)throwsIOException 22. System.out.println(单价:); 23. StringstrA=newBufferedReader(newInputStreamReader(System.in) 24. .readLine(); 25. System.out.println(数量:); 26. StringstrB=newBufferedReader(newInputStreamReader(System.in) 27. .readLine(); 28. System.out.println(类型:); 29. StringstrC=newBufferedReader(newInputStreamReader(System.in) 30. .readLine(); 31. CashContextcc=null; 32. switch(Integer.valueOf(strC) 33. case1:cc=newCashContext(newCashNormal();break; 34. case2:cc=newCashContext(newCashReturn(300,100);break; 35. case3:cc=newCashContext(newCashRebate(0.8);break; 36. 37. doubletotalprices=0d; 38. totalprices=cc.getResult(Double.valueOf(strA)*Double.valueOf(strB); 39. System.out.println(totalprices); 40. 41. /* * 策略模式 * QS:做个商场收银软件,营销员根据客户所购买的商品和数量向客户收费 第一次程序 * author xangqun * 改进的程序3(采用策略模式) */public class ProgramFour /*策略模式(strategy) * 它定义了算法家族,分别封装起来,让他们之间可以相互替换,此模式让算法的变化不会影响到使用算法的客户 *策略模式是一种定义一系列算法的方法,从概念上来看,所以这些算法完成的都是相同的工作,只是实现不同,他可以 *以相同的方式调用所有的算法,减少了各种算法类与使用算法类之间的耦合。 *优点:1.context定义了一系列的可供重用的算法或行为,继承有助于析取出这些算法中公共功能(这里是getresult) * 2.简化了单元测试因为每个算法都有自己的类,可以通过自己的接口单独测试 * 策略模式封装了变化 * 应用:策略模式就是用来封装算法的,但实践中,我们发现可以用他来封装几乎任何类型的规则,只要在分析过程中 * 听到需要在不同时间应用不同的业务规则,就可以考虑使用策略模式处理这种变化的可能性 * param args * throws IOException */public static void main(String args) throws IOException System.out.println(单价:);String strA = new BufferedReader(new InputStreamReader(System.in).readLine();System.out.println(数量:);String strB = new BufferedReader(new InputStreamReader(System.in).readLine();System.out.println(类型:);String strC = new BufferedReader(new InputStreamReader(System.in).readLine();CashContext cc=null;switch(Integer.valueOf(strC)case 1:cc=new CashContext(new CashNormal();break;case 2: cc=new CashContext(new CashReturn(300,100);break;case 3:cc=new CashContext(new CashRebate(0.8);break;double totalprices=0d;totalprices=cc.getResult(Double.valueOf(strA)*Double.valueOf(strB);System.out.println(totalprices);Java代码 1. publicclassCashContextFactory 2. 3. privateCashSupercs; 4. publicCashContextFactory(inttype) 5. switch(type) 6. case1:this.cs=newCashNormal();break; 7. case2:this.cs=newCashReturn(300,100);break; 8. case3:this.cs=newCashRebate(0.8);break; 9. 10. 11. publicdoublegetResult(doublemoney) 12. returncs.acceptC
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- (正式版)DB65∕T 4913-2025 《地理标志产品 木垒羊肉》
- 2026年水果种植公司幼苗移栽管理制度
- T-CIATCM 030.5-2019 中医临床护理信息基本数据集 第5部分:急诊护理记录
- (正式版)DB2312∕T 088-2023 《禽用油乳剂灭活疫苗细菌内毒素含量检验技术操作规程》
- 淘宝股市课件
- 氯碱工艺培训课件
- 氯气课件总结
- 疫情知识培训资料课件
- 氢能源知识培训内容课件
- S-Methyl-2-6-hydroxy-2-3-dihydrobenzofuran-3-yl-acetate-生命科学试剂-MCE
- 电商企业客服流失的问题及解决对策研究
- 血常规及凝血功能解读
- 2025-2026学年人教版(2024)初中生物八年级上册(全册)教学设计(附目录)
- 2025年华为自动化控制试题
- (2025年)江苏省南通市辅警协警笔试笔试模拟考试试题含答案
- 学堂在线 生活英语听说 章节测试答案
- 抗菌药物合理应用培训
- 2024年陕西延长石油招聘真题
- 动态关系网络分析-洞察及研究
- 26.《方帽子店》课件
- 粮食加工企业管理制度
评论
0/150
提交评论