前言
学习设计模式不仅仅是炫技,还可以让你 在看各种代码时如鱼得水。碰到一些典型的设计模式,还会惊讶于Coder的设计。
今天来分享设计模式中的策略模式,也是最近在实习中看到的。
其实策略模式在项目中的应用很多,封装不同的算法,然后只需要调用即可,这样即使你不会设置一些算法(策略),但是你可以拿到别人设计好的策略开箱即用。
什么是策略模式?
就像之前说的,策略模式会定义一系列算法,或者叫做策略 - Strategy。每个算法会独立封装在特定的类中,使用哪个策略,直接调用替换即可。注意:替换的过程是在运行中动态完成的,不需要修改客户端代码。
- 策略模式的组成部分
- 抽象策略(Strategy):定义了所有策略类必须实现的接口或抽象类。
- 具体策略(Concrete Strategy):实现了抽象策略定义的接口或抽象类,包含具体的算法实现。
- 环境(Context):维护一个对策略对象的引用,并通过该引用调用策略。
一般我们的具体策略可以通过工厂模式来生产:策略对象。我们想要调用什么策略,就从工厂拿哪个策略即可。
谁去调用这个策略呢?可以维护一个Map。key就是我们的触发策略条件,value就是我们具体的策略;
接下来我们来看一个代码具体分析策略模式的作用:
策略模式核心实践
// 抽象策略接口
public interface Strategy {
public int doOperation(int num1, int num2);
}
// 具体策略类A
public class OperationAdd implements Strategy {