打字猴:1.700465863e+09
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
1700465884 public static void main(String[]args){
1700465885
1700465886 //输入的两个参数是数字
1700465887
1700465888 int a=Integer.parseInt(args[0]);
1700465889
1700465890 String symbol=args[1];//符号
1700465891
1700465892 int b=Integer.parseInt(args[2]);
1700465893
1700465894 System.out.println(“输入的参数为:”+Arrays.toString(args));
1700465895
1700465896 System.out.println(“运行结果为:”+a+symbol+b+”=”+Calculator.ADD.exec(a,b));
1700465897
1700465898 }
1700465899
1700465900 }
1700465901
1700465902 运行结果与方案一相同。看这个场景类,代码量非常少,而且还有一个显著的优点:真实地面向对象,看看这条语句:
1700465903
1700465904 Calculator.ADD.exec(a,b)
1700465905
1700465906 是不是类似于“拿出计算器(Calculator),对a和b进行加法运算(ADD),并立刻执行(exec)”,这与我们日常接触逻辑是不是非常相似,这也正是我们架构师要担当的职责!
1700465907
1700465908 注意 策略枚举是一个非常优秀和方便的模式,但是它受枚举类型的限制,每个枚举项都是public、final、static的,扩展性受到了一定的约束,因此在系统开发中,策略枚举一般担当不经常发生变化的角色。
1700465909
1700465910
1700465911
1700465912
[ 上一页 ]  [ :1.700465863e+09 ]  [ 下一页 ]