1700465434
1700465435
策略、算法家族的抽象,通常为接口,定义每个策略或算法必须具有的方法和属性。各位看官可能要问了,类图中的AlgorithmInterface是什么意思,嘿嘿,algorithm是“运算法则”的意思,结合起来意思就明白了吧。
1700465436
1700465437
❑ConcreteStrategy具体策略角色
1700465438
1700465439
实现抽象策略中的操作,该类含有具体的算法。
1700465440
1700465441
我们再来看策略模式的通用源码,非常简单。先看抽象策略角色,它是一个非常普通的接口,在我们的项目中就是一个普通得不能再普通的接口了,定义一个或多个具体的算法,如代码清单18-7所示。
1700465442
1700465443
代码清单18-7 抽象的策略角色
1700465444
1700465445
public interface Strategy{
1700465446
1700465447
//策略模式的运算法则
1700465448
1700465449
public void doSomething();
1700465450
1700465451
}
1700465452
1700465453
具体策略也是非常普通的一个实现类,只要实现接口中的方法就可以,如代码清单18-8所示。
1700465454
1700465455
代码清单18-8 具体策略角色
1700465456
1700465457
public class ConcreteStrategy1 implements Strategy{
1700465458
1700465459
public void doSomething(){
1700465460
1700465461
System.out.println(“具体策略1的运算法则”);
1700465462
1700465463
}
1700465464
1700465465
}
1700465466
1700465467
public class ConcreteStrategy2 implements Strategy{
1700465468
1700465469
public void doSomething(){
1700465470
1700465471
System.out.println(“具体策略2的运算法则”);
1700465472
1700465473
}
1700465474
1700465475
}
1700465476
1700465477
策略模式的重点就是封装角色,它是借用了代理模式的思路,大家可以想想,它和代理模式有什么差别,差别就是策略模式的封装角色和被封装的策略类不用是同一个接口,如果是同一个接口那就成为了代理模式。我们来看封装角色,如代码清单18-9所示。
1700465478
1700465479
代码清单18-9 封装角色
1700465480
1700465481
public class Context{
1700465482
1700465483
//抽象策略
[
上一页 ]
[ :1.700465434e+09 ]
[
下一页 ]