本文介绍23种设计模式之策略模式。
定义
策略模式定义了算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。简单来说就是通过定义抽象策略,来实现面向接口编程,将算法的具体实现交由具体策略来完成。
描述
- 模式名称:STRATEGY(策略)
- 类型:对象行为型模式
- 意图:定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换。本模式使得算法可独立于使用它的客户而变化。
- 适用性:
- 许多相关的类仅仅是行为有异。“策略”提供了一种用多个行为中的一个行为来配置一个类的方法。
- 需要使用一个算法的不同变体。
- 效果:
- 优点:
- 一个替代继承的方法。
- 算法可以自由切换。
- 消除了一些条件语句。
- 缺点:
- 策略类会增多。
类图
- 抽象策略(Strategy)类:定义了一个公共接口,各种不同的算法以不同的方式实现这个接口,环境角色使用不同的策略调用不同的算法。
- 具体策略(ConcreteStrategy)类:实现了抽象策略定义的接口,提供具体的算法实现。
- 环境(Context)类:持有一个或多个策略类的引用,最终给客户端调用。
实现代码
Strategy
public interface Strategy {
void stratgyMethod();
}
ConcreteStrategy
public class ConcreteStrategy implements Strategy {
@Override
public void stratgyMethod() {
System.out.println("ConcreteStrategy具体类实现的方法");
}
}
Context
public class Context {
private Strategy strategy;
public void setStrategy(Strategy strategy) {
this.strategy = strategy;
}
public Strategy getStrategy() {
return strategy;
}
public void strategyMethod(){
strategy.stratgyMethod();
}
public static void main(String[] args) {
Context context = new Context();
context.setStrategy(new ConcreteStrategy());
context.strategyMethod();
}
}
运行结果:
ConcreteStrategy具体类实现的方法