打字猴:1.700465671e+09
1700465671
1700465672 输入3个参数,分别是100+200,运行结果如下所示:
1700465673
1700465674 输入的参数为:[100,+,200]
1700465675
1700465676 运行结果为:100+200=300
1700465677
1700465678 这个方案是非常简单的,能够解决问题,我相信这是大家最容易想到的方案,我们不评论这个方案的优劣,等把四个方案全部讲完了,你自己就会发现孰优孰劣。
1700465679
1700465680 我们再来看第二个方案,Calculator类太嗦了,简化算法如代码清单18-13所示。
1700465681
1700465682 代码清单18-13 简化算法
1700465683
1700465684 public class Calculator{
1700465685
1700465686 //加符号
1700465687
1700465688 private final static String ADD_SYMBOL=”+”;
1700465689
1700465690 //减符号
1700465691
1700465692 private final static String SUB_SYMBOL=”-“;
1700465693
1700465694 public int exec(int a,int b,String symbol){
1700465695
1700465696 return symbol.equals(ADD_SYMBOL)?a+b:a-b;
1700465697
1700465698 }
1700465699
1700465700 }
1700465701
1700465702 这也非常简单,就是一个三目运算符,确实简化了很多。有缺陷先别管,我们主要讲设计,你在实际项目应用中要处理该程序中的缺陷。
1700465703
1700465704 该方案的场景类与方案一相同,如代码清单18-12所示,运行结果也相同,不再赘述。
1700465705
1700465706 我们再来思考第三个方案,本章介绍策略模式,那把策略模式应用到该需求是不是很合适啊?是的,非常合适!加减法就是一个具体的策略,非常简单,省略类图,直接看源码,我们先来看抽象策略,定义每个策略必须实现的方法,如代码清单18-14所示。
1700465707
1700465708 代码清单18-14 引入策略模式
1700465709
1700465710 interface Calculator{
1700465711
1700465712 public int exec(int a,int b);
1700465713
1700465714 }
1700465715
1700465716 抽象策略定义了一个唯一的方法来执行运算。至于具体执行的是加法还是减法,运算时由上下文角色决定。我们再来看两个具体的策略,如代码清单18-15所示。
1700465717
1700465718 代码清单18-15 具体策略
1700465719
1700465720 public class Add implements Calculator{
[ 上一页 ]  [ :1.700465671e+09 ]  [ 下一页 ]