如果你想去约会不同的小姐姐,那就要根据小姐姐的喜好来决定带她去做什么?
if(girl=="A"){
...
}else if(girl=="B"){
...
}else if(girl=="C"){
...
}
如果有更多条件需要判断时,该流程控制会变得很长,代码变得臃肿、难以维护、可读性低。
如果想要和一个新的小姐姐约会,那就要在原有代码基础上做修改。
此时我们可以使用策略模式来进行优化。
//定义一个接口
public interface DateStrategy {
void doSomeThing();
}
public class AGirlAction implements DateStrategy{
@Override
public void doSomeThing() {
System.out.println("喝咖啡");
}
}
public class BGirlAction implements DateStrategy{
@Override
public void doSomeThing() {
System.out.println("看电影");
}
}
public class Context {
private DateStrategy dateStrategy;
public Context(DateStrategy dateStrategy) {
this.dateStrategy = dateStrategy;
}
public void doSomeThing(){
dateStrategy.doSomeThing();
}
}
public void date(String girl) {
Context context = null;
switch (girl){
case "A":
context = new Context(new AGirlAction());
break;
case "B":
context = new Context(new BGirlAction());
break;
}
context.doSomeThing();
}
优缺点
优点:
1、算法可以自由切换。
2、避免使用多重条件判断。
3、扩展性良好。
缺点:
1、策略类增多
2、策略类需要对外暴露