JAVA设计模式之策略模式

145 阅读2分钟

本文介绍23种设计模式之策略模式。

定义

策略模式定义了算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。简单来说就是通过定义抽象策略,来实现面向接口编程,将算法的具体实现交由具体策略来完成。

描述

  • 模式名称:STRATEGY(策略)
  • 类型:对象行为型模式
  • 意图:定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换。本模式使得算法可独立于使用它的客户而变化。
  • 适用性:
    • 许多相关的类仅仅是行为有异。“策略”提供了一种用多个行为中的一个行为来配置一个类的方法。
    • 需要使用一个算法的不同变体。
  • 效果:
  • 优点:
    • 一个替代继承的方法。
    • 算法可以自由切换。
    • 消除了一些条件语句。
  • 缺点:
    • 策略类会增多。

类图

1629803455(1).png

  1. 抽象策略(Strategy)类:定义了一个公共接口,各种不同的算法以不同的方式实现这个接口,环境角色使用不同的策略调用不同的算法。
  2. 具体策略(ConcreteStrategy)类:实现了抽象策略定义的接口,提供具体的算法实现。
  3. 环境(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具体类实现的方法