14_策略模式

  • 该模式定义了一系列算法,并将每个算法封装起来,使它们可以相互替换,且算法的变化不会影响使用算法的客户。
  • 策略模式属于对象行为模式,它通过对算法进行封装,把使用算法的责任和算法的实现分割开来,并委派给不同的对象对这些算法进行管理。
  • 策略模式里面有许多函数式编程的思想。

结构

  • 抽象策略(Strategy)类:这是一个抽象角色,通常由一个接口或抽象类实现。此角色给出所有的具体策略类所需的接口。
  • 具体策略(Concrete Strategy)类:实现了抽象策略定义的接口,提供具体的算法实现或行为
  • 环境(Context)类:持有一个策略类的引用,最终给客户端调用。

实例

// Strategy.java
public interface Strategy {
    public void show();
}

// StrategyA.java
public class StrategyA implements Strategy{
    @Override
    public void show() {
        System.out.println("买一送一");
    }
}

// SalesMan.java
public class SalesMan {

    // 聚合策略类对象
    private Strategy strategy;

    public SalesMan(Strategy strategy) {
        this.strategy = strategy;
    }

    // 由促销员展示促销活动给普通用户
    public void salesManShow(){
        strategy.show();
    }
}

// Client.java
public class Client {
    public static void main(String[] args) {
        SalesMan salesMan = new SalesMan(new StrategyA());
        salesMan.salesManShow();
        SalesMan salesMan1 = new SalesMan(new Strategy() {
            @Override
            public void show() {
                System.out.println("明天不要钱");
            }
        });
        salesMan1.salesManShow();
    }
}

/*
Output:
买一送一
明天不要钱
*/

分析

  • 策略模式是函数式编程的一种体现。
  • Java的编码中,策略模式其实是很容易碰见的。比如在sort()中想要定制比较器规则所使用的Comparator接口或者Comparable接口都策略模式的体现;
  • 另外在并发编程中,通过实现Runnable接口中的run()方法,从而实现线程的业务逻辑的方法也属于策略模式。

你可能感兴趣的:(14_策略模式)