设计模式 | 行为型模式 | 策略模式
2021-03-07 本文已影响0人
暴走的朝天椒
什么是策略模式?
例如:公司针对普通客户、老客户、大客户 等等都有不同的报价,如何能让报价算法,很容易地实现可维护、可扩展,又能动态地切换变化,而不影响到使用算法的客户呢?
用来解决上述问题的一个合理的解决方案就是策略模式。那什么是策略模式呢?
定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换,此模式让算法的变化,不会影响到使用算法的客户。
策略模式的作用
策略模式的作用是把具体的算法实现从具体的业务处理中独立出来,把它们实现成单独的算法类,从而形成一系列的算法,并让这些算法可以互相替换。
策略模式的核心不是如何来实现算法,而是如何组织、调用这些算法,从而让程序结构更灵活,具有更好的维护性和扩展性。
策略模式的结构和说明
策略模式的结构.png- Context:负责和具体的策略类交互。
- Strategy:策略接口,定义所有算法的公共接口。
- ConcreteStrategy:具体的策略类实现。
策略模式调用顺序示意图
策略模式调用顺序示意图.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();
}
}