一、意图
定义了算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。
二、适用性
1、 多个类只区别在表现行为不同,可以使用Strategy模式,在运行时动态选择具体要执行的行为。
2、 需要在不同情况下使用不同的策略(算法),或者策略还可能在未来用其它方式来实现。
3、 对客户隐藏具体策略(算法)的实现细节,彼此完全独立。
三、组成
——抽象策略(Strategy)角色:定义了所有算法的一个公共接口,各种不同的算法(即具体策略)以不同的方式实现这个接口,一般使用接口或抽象类实现。
——具体策略(Concrete Strategy)角色:提供了具体的算法实现。
——环境(Context)(或应用场景、上下文)角色:内部维护一个策略类的实例,可在运行时动态设定算法(具体策略),负责跟Strategy之间的交互和数据传递。
四、结构
五、简单实现