《策略模式java代码实现》由会员分享,可在线阅读,更多相关《策略模式java代码实现(8页珍藏版)》请在金锄头文库上搜索。
1、http:/ 代码 1. /* 2. * 策略模式 3. * QS:做个商场收银软件,营销员根据客户所购买的商品和数量向客户收费 第一次程序 4. * author xangqun 5. * 6. */ 7. public class Program 8. 9. /* 10. *PS: 11. * 如果商场搞活动,商品打 8 折,打 5 折怎么办? 12. * param args 13. * throws IOException 14. */ 15. public static void main(String args) throws IOException 16. System.out.
2、println(单价:); 17. String strA = new BufferedReader(new InputStreamReader(System.in) 18. .readLine(); 19. System.out.println(数量:); 20. String strB = new BufferedReader(new InputStreamReader(System.in) 21. .readLine(); 22. double numberd = Double.valueOf(strA) + Double.valueOf(strB); 23. System.out.pr
3、intln(价格为: + numberd); 24. 25. 26. 27. Java 代码 1. /* 2. * 策略模式 3. * QS:做个商场收银软件,营销员根据客户所购买的商品和数量向客户收费 第一次程序 4. * author xangqun 5. * 改进的程序 1 6. */ 7. public class ProgramTwo 8. 9. /* 10. * PS:3 个分支执行的语句除了打折不一样外几乎没什么不同应该考虑重构下 11. * param args 12. * throws IOException 13. * 14. */ 15. public static vo
4、id main(String args) throws IOException 16. 17. System.out.println(单价:); 18. String strA = new BufferedReader(new InputStreamReader(System.in) 19. .readLine(); 20. System.out.println(数量:); 21. String strB = new BufferedReader(new InputStreamReader(System.in) 22. .readLine(); 23. System.out.println(折
5、扣:); 24. String strC = new BufferedReader(new InputStreamReader(System.in) 25. .readLine(); 26. int numc= Integer.valueOf(strC); 27. double result = 0; 28. switch(numc) 29. case 1:result=Double.valueOf(strA) + Double.valueOf(strB);break; 30. case 2:result=(Double.valueOf(strA) + Double.valueOf(strB)
6、*0.8;break; 31. case 3:result=(Double.valueOf(strA) + Double.valueOf(strB)*0.5;break; 32. 33. System.out.println(result); 34. Java 代码 1. public abstract class CashSuper 2. 3. public abstract double acceptCash(double money); 4. Java 代码 1. public class CashNormal extends CashSuper 2. 3. Override 4. pu
7、blic double acceptCash(double money) 5. 6. return money; 7. 8. 9. Java 代码 1. public class CashRebate extends CashSuper 2. 3. private double moneyRebate=1d; 4. public CashRebate() 5. public CashRebate(String moneyRebate) 6. this.moneyRebate=Double.valueOf(moneyRebate); 7. 8. Override 9. public double
8、 acceptCash(double money) 10. return money*moneyRebate; 11. 12. 13. Java 代码 1. public class CashReturn extends CashSuper 2. 3. private double moneyCondition=0.0d; 4. private double moneyReturn=0.0d; 5. public CashReturn() 6. public CashReturn(double moneyCondition,double moneyReturn) 7. this.moneyCo
9、ndition=moneyCondition; 8. this.moneyReturn=moneyReturn; 9. 10. Override 11. public double acceptCash(double money) 12. double result=money; 13. if(moneymoneyCondition) 14. result=money-Math.floor(money/moneyCondition)*moneyReturn; 15. 16. return result; 17. 18. 19. Java 代码 1. public class CashFacto
10、ry 2. 3. public static CashSuper createCashAccept(int type) 4. CashSuper cs=null; 5. switch(type) 6. case 1:cs=new CashNormal();break; 7. case 2: cs=new CashReturn(300,100);break; 8. case 3:cs=new CashRebate(0.8);break; 9. 10. return cs; 11. 12. Java 代码 1. /* 2. * 策略模式 3. * QS:做个商场收银软件,营销员根据客户所购买的商品
11、和数量向客户收费 第一次程序 4. * author xangqun 5. * 改进的程序 2(采用简单工厂模式) 6. */ 7. public class ProgramThree 8. 9. /*PS: 10. * 简单工厂模式只是解决对象的创建问题,面对算法时常变动应该考虑用其他方法 11. * param args 12. * throws IOException 13. */ 14. public static void main(String args) throws IOException 15. System.out.println(单价:); 16. String strA
12、 = new BufferedReader(new InputStreamReader(System.in) 17. .readLine(); 18. System.out.println(数量:); 19. String strB = new BufferedReader(new InputStreamReader(System.in) 20. .readLine(); 21. 22. CashSuper cs=CashFactory.createCashAccept(1); 23. double totalprices=0d; 24. totalprices=cs.acceptCash(Double.valueOf(strA)*Double.valueOf(strB); 25. System.out.println(totalprices); 26. 27. 28. Java 代码 1. public class CashContext 2. 3. private CashSuper cs; 4. public CashContext(CashSuper csuper) 5. this.cs=csuper; 6. 7. public double getResult(double money) 8. return cs.acceptCash(money); 9. 10. J