简介
策略模式是定义一系列算法, 并将每种算法分别放入独立的类中, 以使算法的对象能够相互替换。
未使用策略模式的代码
@Test
public void test(){
String type = "1";
if(type.equals("1")){
System.out.println("Executing strategy A");
}else if(type.equals("2")){
System.out.println("Executing strategy B");
}
}
上面的代码是没有使用策略模式的,需要使用if else
依次判断type
的值来选择对应的执行策略,如果说type
值得数量比较多的时候,那就会导致有很多的if else
,也会影响后续的维护。
使用策略模式
抽象策略类
public interface Strategy {
void execute();
}
该类统一了所有具体的策略类中的方法。
具体策略类
public class ConcreteStrategyA implements Strategy {
public void execute() {
System.out.println("Executing strategy A");
}
}
public class ConcreteStrategyB implements Strategy {
public void execute() {
System.out.println("Executing strategy B");
}
}
将每一个type
对应的策略封装成一个类。
环境类
public class Context {
private static HashMap<String, Strategy> map = new HashMap<>();
static{
map.put("1",new ConcreteStrategyA());
map.put("2",new ConcreteStrategyB());
}
public void executeStrategy(String type) {
map.get(type).execute();
}
}
通过该类封装所有的type
对应的策略,并根据不同的type
来选择不同的策略。
测试
@Test
public void strategyTest(){
Context context = new Context();
context.executeStrategy("2");
}