设计模式:策略模式

说明:只做学习用,有问题欢迎评论指正

在策略模式(Strategy Pattern)中,一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式。在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的 context 对象。策略对象改变 context 对象的执行算法。

一、角色

  • 封装⻆⾊:上层访问策略的⼊⼝,它持有抽象策略⻆⾊的引⽤。
  • 抽象策略⻆⾊:提供接⼝或者抽象类,定义策略组必须拥有的⽅法和属性。
  • 具体策略⻆⾊:实现抽象策略,定义具体的算法逻辑。

二、代码


public class Context {

    private Washer strategy;

    /**
     * 传进的是⼀个具体的策略实例
     */
    public Context(Washer strategy) {
        this.strategy = strategy;
    }

    public static void main(String[] args) {
        Context context = new Context(new Often());
        context.contextInterface();
        Context contextB = new Context(new Speediness());
        contextB.contextInterface();
    }

    /**
     * 调⽤策略
     */
    public void contextInterface() {
        strategy.algorithmLogic();
    }
}

/**
 * 洗衣机  抽象策略
 */
interface Washer {
    public void algorithmLogic();
}

/**
 * 常用模式
 */
class Often implements Washer {

    @Override
    public void algorithmLogic() {
        System.out.println("===>>>洗衣机常用模式");
    }
}

/**
 * 快速模式
 */
class Speediness implements Washer {

    @Override
    public void algorithmLogic() {
        System.out.println("===>>>洗衣机快速模式");
    }
}

复制代码

三、优缺点

优点:

  1. 算法可以自由切换。
  2. 避免使用多重条件判断。
  3. 扩展性良好。

缺点:

  1. 策略类过多,导致类也很多。
  2. 所有策略类都需要对外暴露。

如果一个系统的策略多于四个,就需要考虑使用混合模式,解决策略类膨胀的问题。