Strategy - 策略设计模式

11 阅读1分钟

什么是策略模式?

在策略模式(Strategy Pattern)中,一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式。在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的 context 对象。策略对象改变 context 对象的执行算法。好比一把霰弹枪,针对的场景,可以选用不同种类的子弹,打出不同的效果。在电商系统中,策略模式多应用于价格计算场景。

优缺点

优点:

1.算法可以自由切换。
2.扩展性良好。

缺点:

1.策略类会增多。
2.所有策略类都需要对外暴露。

示例

// strategy 接口
interface IStrategy {
    void attack();
}

// 具体的策略实现类
class PyroStrategy implements IStrategy {
    @Override
    public void attack() {
        System.out.println("火焰造成30点伤害,附加每秒5点灼烧伤害,持续6秒");
    }
}

class HydroStrategy implements IStrategy {
    @Override
    public void attack() {
        System.out.println("海浪造成20点伤害,附加全体减速20%,持续6秒");
    }
}

class Context {
    private IStrategy strategy;
    public Context(IStrategy strategy) {
        this.strategy = strategy;
    }
    public void attack() {
        this.strategy.attack();
    }
}

// 测试类
public static void main(String[] args) {
    final PyroStrategy pyroStrategy = new PyroStrategy();
    Context context = new Context(pyroStrategy);
    context.attack();
    final HydroStrategy hydroStrategy = new HydroStrategy();
    context = new Context(hydroStrategy);
    context.attack();
}

Output:

火焰造成30点伤害,附加每秒5点灼烧伤害,持续6秒
海浪造成20点伤害,附加全体减速20%,持续6秒