策略模式:定义了算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。
1,定义算法接口
package com.pattern.strategy.test; public interface MoveBehavior { public void move(); }
2,定义算法的实现类
下面是三个算法的实现类
a, MoveFastBehavior
package com.pattern.strategy.test; public class MoveFastBehavior implements MoveBehavior{ /** * @see com.pattern.strategy.test.MoveBehavior#move() */ @Override public void move() { System.out.println("move fast!"); } }
b,MoveNormalBehavior
package com.pattern.strategy.test; public class MoveNormalBehavior implements MoveBehavior{ /** * @see com.pattern.strategy.test.MoveBehavior#move() */ @Override public void move() { System.out.println("move normal!"); } }
c,MoveSlowBehavior
package com.pattern.strategy.test; public class MoveSlowBehavior implements MoveBehavior{ /** * @see com.pattern.strategy.test.MoveBehavior#move() */ @Override public void move() { System.out.println("move slow!"); } }
3,定义客户端抽象类
package com.pattern.strategy.test; public abstract class Car { public MoveBehavior moveBehavior; public void performMove(){ moveBehavior.move(); } public void setMoveBehavior(MoveBehavior moveBehavior){ this.moveBehavior = moveBehavior; } }
4,定义具体客户端类
package com.pattern.strategy.test; public class BNZCar extends Car{ public BNZCar(){ moveBehavior = new MoveFastBehavior(); } }
在构造具体的客户端类时设置使用的算法类 !!!
5,测试
package com.pattern.strategy.test; public class CarTest { public static void main(String[] args) { Car bnz = new BNZCar(); bnz.performMove(); bnz.setMoveBehavior(new MoveSlowBehavior()); bnz.performMove(); } }
可以在执行时动态修改 算法。
执行结果:
move fast!
move slow!
类图如下所示: