设计模式 策略模式

本文将介绍设计模式中的策略模式。

一、什么策略模式?

同一个行为往往有不同的实现算法。

策略模式针对一系列算法,将每个算法封装为独立的类,让它们可以相互替换。

通过策略模式,算法可以自由切换和扩展。

二、实现

1. 结构

2. 角色

  • Context 环境类:
    • 使用算法的角色,它在完成某项行为时可以采用多种策略
    • Context 环境类中持有 Strategy 抽象策略类的引用,并提供该引用的设置方法
  • Strategy 抽象策略类:
    • 是所有 ConcreteStrategy 具体策略类的父类
    • 定义了算法的抽象方法
  • ConcreteStrategy 具体策略类:
    • Strategy 抽象策略类的子类
    • 实现了算法

3. 简单示例

Context:

1
2
3
4
5
6
7
8
9
10
public class Context {

private Strategy strategy;

// SETTER

public void fun() {
strategy.algorithm();
}
}

Strategy:

1
2
3
public abstract class Strategy {
public abstract void algorithm();
}

ConcreteStrategy:

1
2
3
4
5
public class ConcreteStrategy extends Strategy {
public void algorithm() {
// ···
}
}

三、优缺点

1. 优点

  • 可以在不修改原有代码的情况下扩展新算法
  • 可以更灵活地切换算法

2. 缺点

  • 客户端必须要了解所有策略并作出选择
  • 系统中将会有大量地具体策略类

参考

  • 《Java 设计模式》