策略模式就是定义了很多算法的方法,这些方法有着相同的返回,只是实现的算法不一样。这样在抽象方法或者接口中抽出相同的方法,在具体的策略方法中实现不同的策略算法,再由一个策略的控制类,对这些算法进行不同的调度。根据以上描述,我们用策略模式重新写之前简单工厂模式的实现。
首先定义策略接口StrategyInterface:
public interface StrategyInterface {
publicString getKey();
}
然后,定义不同的策略实现Coder,Geek,Hacker
public class Coder implementsStrategyInterface{
@Override
publicString getKey() {
return"this is coder";
}
}
public class Geek implements StrategyInterface{
@Override
publicString getKey() {
return"this is Geek";
}
}
public class Hacker implementsStrategyInterface{
@Override
publicString getKey() {
return"this is hacker";
}
}
最后写策略的控制类,策略的控制类包含一个策略对象的引用,用来调用不同的策略实现
public class StrategyControl {
privateStrategyInterface strategyInterface;
publicStrategyControl(StrategyInterface strategyInterface) {
super();
this.strategyInterface= strategyInterface;
}
publicString getKey(){
returnthis.strategyInterface.getKey();
}
}
当客户端调用时,只需要调用策略控制类的方法即可,如果需要添加策略,只需要新增一个策略实现类即可,不需要修改客户端和控制类的代码。
编写客户端的测试代码:
public class StrategyTest {
publicstatic void main(String[] args) {
StrategyInterfacesi = new Coder();
StrategyControlsc = new StrategyControl(si);
Stringkey = sc.getKey();
System.out.println(key);
}
}
输出结果如下:
策略模式的优点:
策略模式提供了管理相关算法的方法,使用策略模式可以将公共代码移到父类中,避免编写重复的代码,客户端调用时也不需要做if判断。
策略模式的缺点:
使用策略模式时,客户端需要知道所有的策略,来决定到底使用哪一种策略。当策略非常多时,需要建立很多的策略实现类。