设计模式 | 行为型模式 | 策略模式

2021-03-07  本文已影响0人  暴走的朝天椒

什么是策略模式?

例如:公司针对普通客户、老客户、大客户 等等都有不同的报价,如何能让报价算法,很容易地实现可维护、可扩展,又能动态地切换变化,而不影响到使用算法的客户呢?

用来解决上述问题的一个合理的解决方案就是策略模式。那什么是策略模式呢?

定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换,此模式让算法的变化,不会影响到使用算法的客户。

策略模式的作用

策略模式的作用是把具体的算法实现从具体的业务处理中独立出来,把它们实现成单独的算法类,从而形成一系列的算法,并让这些算法可以互相替换。

策略模式的核心不是如何来实现算法,而是如何组织、调用这些算法,从而让程序结构更灵活,具有更好的维护性和扩展性。

策略模式的结构和说明

策略模式的结构.png

策略模式调用顺序示意图

策略模式调用顺序示意图.png

策略模式的示例代码

/**
 * 定义策略算法的接口
 */
public interface Strategy {
    /**
     * 算法方法
     */
    public void algorithmInterface();
}
/**
 * 算法A
 */
public class ConcreteStrategyA implements Strategy{
    @Override
    public void algorithmInterface() {
        // 具体的算法实现
    }
}
/**
 * 算法B
 */
public class ConcreteStrategyB implements Strategy{
    @Override
    public void algorithmInterface() {
        // 具体的算法实现
    }
}
/**
 * 算法C
 */
public class ConcreteStrategyC implements Strategy{
    @Override
    public void algorithmInterface() {
        // 具体的算法实现
    }
}
/**
 * 上下文对象,通常会持有一个具体的策略类
 */
public class Context {
    /**
     * 持有一个具体的策略对象
     */
    private Strategy strategy;

    /**
     * 通过构造方法,传入一个具体的策略对象
     * @param strategy
     */
    public Context(Strategy strategy){
        this.strategy = strategy;
    }

    /**
     * 调用具体策略的算法运算
     */
    public void contextInterface(){
        strategy.algorithmInterface();
    }
}
上一篇下一篇

猜你喜欢

热点阅读