策略模式

   策略模式(Strategy Pattern):定义一系列算法类,将每一个算法封装起来,并让它们可以相互替换,此模式让算法的变化不会影响到使用算法的用户。    如果代码中有很多的if..else.. 就可以使用策略模式来解决这些问题。

适用场景

  • 系统有很多类,而他们的区别仅仅在于他们的行为不同

  • 一个系统需要动态地在几种算法中选择一种

优点

  • 对开闭原则完美地支持

  • 避免使用多重条件转移语句

  • 提高算法地保密性和安全性

缺点

  • 客户端必须知道所有的策略类,并自行决定使用哪一个策略类

  • 产生很多的策略类

下面我们引入一种业务场景,超市在店庆的时候,会进行促销,但是促销的策略有多种,满减,立减,返现等不同的方式。

Golang Demo

Java Demo

上面的案例中就是策略模式的最简单的应用。但是这并不能满足我们复杂的开发。例如,如果我们在Test类中有这样一段代码的话。

这样话,我们还是避免不了大量的if..else..的使用。此时,我们就可以结合工厂模式,或者享元模式来进行进一步的优化

UML

策略模式UML

补充另一个版本的Java/Scala Demo 以及源码解析

Java Demo_

Scala Demo

UML_

源码解析

Last updated

Was this helpful?