Strategy 策略
该模式定义一些列算法, 并将算法封装到一起.
优点:
- 多重条件语句不易维护, 而使用策略模式可以避免使用多重条件语句.
- 策略模式提供一些列的重用算法组, 恰当使用继承可以吧算法组公用代码转移到父类里面. 从而避免代码的重复.
- 策略模式可以提供相同行为的不同实现, 客户可以根据不同时间或空间要求选择的不同.
- 策略模式可以提供开闭原则的完美支持, 可以不修改源码的情况下,灵魂增加算法.
- 策略模式把算法的使用放到环境类中,而算法的实现移到具体策略类中,实现了二者的分离。
缺点:
- 客户端必须理解所有策略算法的区别,以便适时选择恰当的算法类。
- 策略模式造成很多的策略类。
应用场景:
- 旅行出游的时候,选择骑自行车,坐汽车,
- 诸葛钢铁有很多锦囊妙计,每一个荷包都是一个策略.
- 选择不同种类的支付.
使用场景:
- 如在一个系统有很慢类,它之间的区别只是区别于他们的行为,那么使用策略模式可以动态让一个对象在许多行为中选择一种行为.
- 一个系统需要动态的几种算法中选择一种.
关于支付的分析图
代码实现
1 | type Payment interface { |
1 |
|