针对一个问题有多种处理办法时可以使用策略模式。当有很多if-else或者switch时可以考虑设置策略。
策略模式和代理模式在应用情景上有点相似,但是代理模式有一个代理类,将对子类的选择封装在其中,对外通过代理类提供服务。而策略模式则是通过动态注入的方式设置合适的策略。策略模式更侧重于策略或是算法的封装隔离,而代理模式更侧重于通过代理类提供代理服务
例子:
public interface SayStragety {
String say();
}
public class CatStragety implements SayStragety{
@Override
public String say() {
return "喵喵喵";
}
}
public class DogStragety implements SayStragety{
@Override
public String say() {
return "汪汪汪";
}
}
public class Say {
SayStragety sayStragety;
public SayStragety getSayStragety() {
return sayStragety;
}
public void setSayStragety(SayStragety sayStragety) {
this.sayStragety = sayStragety;
}
public String say(){
return sayStragety.say();
}
}
测试:
public class Test{
public static void main(String[] args) {
Say say = new Say();
say.setSayStragety(new CatStragety());
System.out.println(say.say());
say.setSayStragety(new DogStragety());
System.out.println(say.say());
}
}
输出:
System.out: 喵喵喵
System.out: 汪汪汪