【设计模式】策略模式

81 阅读1分钟

定义

属于行为型模式。它定义了算法家族,分别封装起来,让它们之前可以互相替换,此模式让算法的变化不会影响到使用算法的客户。我们创建表示各种策略的对象和一个行为随着策略改变而改变的context对象的执行算法。当一个系统里的许多类的不同只有它们的行为,策略模式可以让一个对象在许多行为中选择一个

结构

1.context类

该类使用了某种策略,即接收一个策略对象

2.抽象策略类

提取了所有策略的公共方法

3.具体策略类

提供具体的策略方法

例子

context类

image.png context类创建时需要传入一个策略对象,并且调用该策略对象中的具体策略取得结果

抽象策略类

image.png 抽象策略提取出公共方法

具体策略类

image.png 实现具体的策略

客户端

image.png 客户端模拟现在是加法的情况下策略模式的运作

结果

image.png

优点

1.算法可自由切换 2.避免使用多重判断 3.扩展性好 4.简化了单元测试,因为每个算法都有单独的类,可以通过自己的接口单独测试

缺点

1.策略类会增多 2.策略类都要暴露

策略与简单工厂结合

将实例化具体策略的过程由客户端转移到context类中 image.png

客户端

image.png

简单工厂模式需要让客户端认识两个类(父类和工厂类),而策略模式和简单工厂结合只要认识一个context类即可