一.策略模式(Strategy Pattern
):定义一系列算法类,将每一个算法封装起来,并让它们可以相互替换,策略模式让算法独立于使用它的客户而变化,也称为政策模式(Policy
)。策略模式是一种对象行为型模式。
Context(环境类):环境类是使用算法的角色,它在解决问题(即某个实现方法)时可以采用多种策略。在环境类中维持一个对抽象策略类的引用实例,用于定义所采用的策略
(环境类 就是调用 通过父类调用具体子类的中间桥梁)
Strategy(抽象策略类):它为所支持的算法声明了抽象方法,是所有策略类的父类,它可以是抽象类、具体类、接口。
环境类通过抽象策略类中声明的方法在运行时调用具体策略类中实现的算法。
(抽象策略类 就是封装的 抽象类或者接口,再者可以定义为具体类,让其他子类继承或实现的父类)
ConcreteStrategy(具体策略类):它实现了在抽象策略类中声明的算法,在运行时,具体策略类将覆盖在环境类中定义的抽象策略类对象,使用一种具体的算法实现某个业务处理。
(具体策略类 就是实现父类或者接口的子类)
二.HeadFirst设计模式书中策略(鸭类)的设计图如下:
三.优缺点
优点:
1.符合开闭原则,可在不修改原有系统的基础上选择算法或行为,也可以灵活地增加新的算法或行为
2.将算法的定义和使用分离开来,符合单一职责原则,可最大程度地复用算法
缺点: 系统可能或产生很多具体策略类
四.适用场景
策略模式用于算法的自由切换和扩展;
策略模式对应于解决某一问题的一个算法族,允许用户从该算法族中任选一个算法解决某一问题,同时可以方便地更换算法或增加新的算法。
只要涉及到算法的封装、复用和切换都可以考虑策略模式。
【策略模式,其实就是父类和子类共性部分用继承。差异部分用接口。并且接口的调用放在父类中,我们称之为委托。然后子类继承抽象父类,实例化接口。最后在子类实现动态绑定】
五.日常中使用策略模式的场景
支付方式的选择、交通工具的选择,签名方式的选择。一句总结策略模式就是把选择权交给用户