策略模式很大方面是为了解决代码中多层嵌套if else的问题。当某一类业务有共同特性时,并且分为多个场景要走不同的逻辑时,比如if(我是人) deal(我要吃饭) if(我是牛) deal(我要吃草)if(我是大熊猫) deal(我要吃竹子) 这样如此多的业务的话 会变成if() else if() else if() else{} 如果中间if中再带if判断条件,整个代码看起来就晕掉。稍微看下实际代码这么写有多乱
这时候可以使用策略模式美化代码。
定义一个共同接口
public interface Person {
void eat();
}
Zs Ls Ww是三个人 例比上面的不同品种吃东西
public class Zs implements Person{
@Override
public void eat() {
System.out.println("张三吃饭了");
}
}
public class Ls implements Person{
@Override
public void eat() {
System.out.println("李四干饭了");
}
}
public class Ww implements Person{
@Override
public void eat() {
System.out.println("王五干饭了");
}
}
然后建立一个策略类,后续代码中可直接通过此策略类来达到具体目的
public class Strategy {
private Person person;
public Strategy(Person person){
this.person = person;
}
public void excute(){
person.eat();
}
}
测试类
public class Test {
public static void main(String[] args) {
Strategy strategy = new Strategy(new Ls());
strategy.excute();
Strategy strategy1 = new Strategy(new Zs());
strategy1.excute();
}
}
这样的话看上去代码维护性会变得更高,如果新增了某个人的实现,不需要改变源代码,只需要新增一个实现类,然后可以直接传入调用。