4. Strategy 模式

场景

我们按照需求设计了一个国际电子商务的程序,其中有一个涉及到了计算税收。在我们设计完成后,又来了一个新的需求:因为这个系统要在加拿大用,所以我们要增加一个按照加拿大的税收制度计算税款的功能。

怎么做:粘贴复制?继承?
这时,因为系统也要在中国用,所以又需要增加一个按照中国的税收制度计算税款的功能。

显然粘贴和继承都会让代码臃肿和复杂。

这里有三个原则要考虑:

  1. 针对接口进行编程,而不要针对实现进行编程。
  2. 优先使用对象组合,而不是类继承。
  3. 考虑设计中什么应该是可变的。

所以我们要做的,

  1. 寻找到变化,并将它封装到一个单独的类。
  2. 把这个类包含在另一个类中。

即:创建一个抽象类定义如何在概念上完成税额计算,然后为每种税收派生具体的类。

总结

定义:定义一系列算法,把他们一个个封装起来,并且使他们可以相互替换,stragery模式使算法独立于使用它的客户而变化。
意图:可以根据不同的上下文,使用不同的业务规则或者算法。
解决方案:将对算法的选择和算法的实现相分离。

你可能感兴趣的:(4. Strategy 模式)