定义
属于行为型模式。它定义了算法家族,分别封装起来,让它们之前可以互相替换,此模式让算法的变化不会影响到使用算法的客户。我们创建表示各种策略的对象和一个行为随着策略改变而改变的context对象的执行算法。当一个系统里的许多类的不同只有它们的行为,策略模式可以让一个对象在许多行为中选择一个
结构
1.context类
该类使用了某种策略,即接收一个策略对象
2.抽象策略类
提取了所有策略的公共方法
3.具体策略类
提供具体的策略方法
例子
context类
context类创建时需要传入一个策略对象,并且调用该策略对象中的具体策略取得结果
抽象策略类
!
抽象策略提取出公共方法
具体策略类
实现具体的策略
客户端
客户端模拟现在是加法的情况下策略模式的运作
结果
优点
1.算法可自由切换
2.避免使用多重判断
3.扩展性好
4.简化了单元测试,因为每个算法都有单独的类,可以通过自己的接口单独测试
缺点
1.策略类会增多
2.策略类都要暴露
策略与简单工厂结合
将实例化具体策略的过程由客户端转移到context类中
客户端
简单工厂模式需要让客户端认识两个类(父类和工厂类),而策略模式和简单工厂结合只要认识一个context类即可