1700465834
//减法运算
1700465835
1700465836
SUB(”-“){
1700465837
1700465838
public int exec(int a,int b){
1700465839
1700465840
return a-b;
1700465841
1700465842
}
1700465843
1700465844
};
1700465845
1700465846
String value=””;
1700465847
1700465848
//定义成员值类型
1700465849
1700465850
private Calculator(String_value){
1700465851
1700465852
this.value=_value;
1700465853
1700465854
}
1700465855
1700465856
//获得枚举成员的值
1700465857
1700465858
public String getValue(){
1700465859
1700465860
return this.value;
1700465861
1700465862
}
1700465863
1700465864
//声明一个抽象函数
1700465865
1700465866
public abstract int exec(int a,int b);
1700465867
1700465868
}
1700465869
1700465870
先想一想它的名字,为什么叫做策略枚举?枚举没有问题,它就是一个Enum类型,那为什么又叫做策略呢?找找看能不能找到策略的影子在里面?是的,我们定义了一个抽象的方法exec,然后在每个枚举成员中进行了实现,如果不实现会怎么样呢?你试试看看,不实现该方法就不能编译,现在是不是清楚了?把原有定义在抽象策略中的方法移植到枚举中,每个枚举成员就成为一个具体策略。简单吧,总结一下,策略枚举定义如下:
1700465871
1700465872
❑它是一个枚举。
1700465873
1700465874
❑它是一个浓缩了的策略模式的枚举。
1700465875
1700465876
当然,读者可能要反思了,我使用内置类也可以实现相同的功能,写一个Context类,然后把抽象策略、具体策略都内置进去,不就可以解决问题了,是的,可以解决,但是扩展性如何?可读性如何?代码是让人读的,然后才是让机器执行,别把顺序搞反了!
1700465877
1700465878
我们继续完善方案四,场景类稍有改动,如代码清单18-19所示。
1700465879
1700465880
代码清单18-19 场景类
1700465881
1700465882
public class Client{
1700465883
[
上一页 ]
[ :1.700465834e+09 ]
[
下一页 ]