策略模式应用场景
当我们在淘宝购物的时候,我们经常会看到各种各样的活动。比如说购买300减40,买两件打八折,送优惠券等等。我想不少人都会写一堆if else
来处理这样的情况。在活动结束后,或者更换活动后又一些一堆if else
。今天的这个策略模式,就很好的解决了这歌问题。
策略模式代码
抽象策略
package com.demo.test.strategy.iml;
public interface Strategy {
public void method();
}
具体策略1
package com.demo.test.strategy;
import com.demo.test.strategy.iml.Strategy;
public class LeftStrategy implements Strategy {
@Override
public void method() {
System.out.println("左脚先进公司,你被开除了。");
}
}
具体策略2
package com.demo.test.strategy;
import com.demo.test.strategy.iml.Strategy;
public class RightStrategy implements Strategy {
public void method(){
System.out.println("右脚先进公司,你被开除了。");
}
}
具体策略3
package com.demo.test.strategy;
import com.demo.test.strategy.iml.Strategy;
public class DoubleStrategy implements Strategy {
public void method(){
System.out.println("双脚跳进公司,地板踩破了。赔钱!!!");
}
}
环境类
package com.demo.test.strategy;
import com.demo.test.strategy.iml.Strategy;
public class ContextCompany {
private Strategy strategy;
public ContextCompany(){
//默认右脚先进公司
this.strategy = new RightStrategy();
}
public void setStrategy(Strategy strategy) {
this.strategy = strategy;
}
public void judgment(){
this.strategy.method();
}
}
客户端
package com.demo.test.strategy;
public class Client {
public static void main(String[] agr){
ContextCompany contextCompany = new ContextCompany();
contextCompany.judgment();
contextCompany.setStrategy(new LeftStrategy());
contextCompany.judgment();
contextCompany.setStrategy(new DoubleStrategy());
contextCompany.judgment();
}
}
总结
当如果需要新增一个新的进入公司方式(策略),只要新增一个具体策略类。在客户端赋值给环境类。不用写一堆if else
,而且,在当有多个策略执行的时候,只要按顺序执行类过就可以了。