1.什么是策略模式
策略是一种行为设计模式, 它将一组行为转换为对象, 并使其在原始上下文对象内部能够相互替换。
2.案例
2.1 上下文
Context.java
/**
* com.example.design.behavior.strategy
* Description:
* 上下文
*
* @author jack
* @date 2021/6/2 3:54 下午
*/
public class Context {
/**
* 上下文会维护指向某个策略对象的引用。上下文不知晓策略的具体类。上下文必须通过策略接口来与所有策略进行交互。
*/
private final Strategy strategy;
public Context(Strategy strategy) {
this.strategy = strategy;
}
public int executeStrategy(int a, int b) {
return strategy.execute(a, b);
}
}
2.2 抽象策略
Strategy.java
/**
* com.example.design.behavior.strategy
* Description:
* 抽象策略
*
* @author jack
* @date 2021/6/2 3:51 下午
*/
public interface Strategy {
/**
* 计算
*
* @param a a
* @param b b
* @return result
*/
int execute(int a, int b);
}
2.3 具体策略
ConcreteStrategyAdd.java
/**
* com.example.design.behavior.strategy
* Description:
* 具体策略
*
* @author jack
* @date 2021/6/2 3:52 下午
*/
public class ConcreteStrategyAdd implements Strategy {
@Override
public int execute(int a, int b) {
return a + b;
}
}
ConcreteStrategyMultiply.java
/**
* com.example.design.behavior.strategy
* Description:
* 具体策略
*
* @author jack
* @date 2021/6/2 3:53 下午
*/
public class ConcreteStrategyMultiply implements Strategy {
@Override
public int execute(int a, int b) {
return a * b;
}
}
ConcreteStrategySubtract.java
/**
* com.example.design.behavior.strategy
* Description:
* 具体策略
*
* @author jack
* @date 2021/6/2 3:53 下午
*/
public class ConcreteStrategySubtract implements Strategy {
@Override
public int execute(int a, int b) {
return a - b;
}
}
3.客户端
/**
* com.example.design.behavior.strategy
* Description:
*
* @author jack
* @date 2021/6/2 3:58 下午
*/
public class Client {
public static void main(String[] args) {
Context context = null;
int type = 2;
if (type == 1) {
context = new Context(new ConcreteStrategyAdd());
} else if (type == 2) {
context = new Context(new ConcreteStrategySubtract());
} else if (type == 3) {
context = new Context(new ConcreteStrategyMultiply());
}
System.out.println(context.executeStrategy(1, 10));
}
}