策略模式

策略模式定义

定义一系列算法类,将每一个算法封装起来,并让它们可以相互替换。

策略模式结构图

在这里插入图片描述

策略模式角色介绍

抽象策略类,Strategy,一个抽象类或具体类,也可以是接口,负责声明算法接口;客户端面向抽象策略类编程,持有抽象策略类类型成员变量。

具体策略类,ConcreteStrategy,它实现了在抽象策略类中声明的算法,在运行时,客户端的抽象策略类型成员变量指向具体策略类对象,使用一种具体的算法实现某个业务处理。

策略模式结构代码

抽象策略类:

public interface Strategy {

    void request();
}

具体策略A:

public class ConcreteStrategyA implements Strategy {
    public void request() {
        System.out.println("我是策略A");
    }
}

具体策略B:

public class ConcreteStrategyB implements Strategy {
    public void request() {
        System.out.println("我是策略B");
    }
}

客户端:

public class Client {

    public static void main(String[] args) {
        //按照策略A执行
        Strategy strategy = new ConcreteStrategyA();
        strategy.request();

        //按照策略B执行
        strategy = new ConcreteStrategyB();
        strategy.request();
    }
}

策略模式运行机制

策略模式中客户端持有抽象策略类型成员变量;
所有的策略子类负责实现各种策略算法;
实际业务中,随着业务需要,客户端抽象策略类型成员变量不断变换指向的具体策略对象,执行不同的策略算法;
策略模式是依赖倒转和里氏替换原则的具体体现。

策略模式解决的核心问题

策略模式为业务提供所有策略算法,客户端可以按需随时替换使用;策略模式解决了逻辑中if判断问题,可以随时对策略进行扩展,符合开闭原则;