一、策略模式介绍
策略模式(Strategy Pattern)是一种行为设计模式,它定义了一系列算法,并将每一种算法封装起来,使它们可以相互替换。策略模式让算法的变化独立于使用算法的客户。在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的上下文对象。策略模式涉及到三个主要角色:
-
策略接口(Strategy Interface):定义了一个公共接口,所有的算法或行为以这个接口为准。环境角色使用这个接口来调用具体的算法。
-
具体策略类(Concrete Strategies):实现了策略接口的类。具体策略类封装了具体的算法或行为,并负责具体的计算过程。
-
环境类(Context):接受客户的请求,随后把请求委托给某一个策略类。环境类会维护对策略对象的引用,并可在运行时动态地改变具体的策略。这个类一般会有一个成员变量来保存对策略对象的引用,还有一个成员方法来设置环境对象的策略。
策略模式的优点
- 算法自由切换:策略模式使得算法可以在不影响到客户端的情况下变化。
- 避免使用多重条件判断:将条件判断语句转移到了具体的策略类中进行,从而避免了多重条件语句。
- 扩展性良好:当增加一个新的算法时,不需要修改原来已经写好的代码,只需要添加一个新的策略类即可。
策略模式的缺点
- 策略类会增多:每增加一个策略,就需要增加一个策略类,这样会导致系统中类的个数大量增加。