策略模式在平时开发中应该算是使用算多的设计模式了。在spring源码中大量使用了这种模式,比如解析xml标签时是根据配置选择相应的解析类的。参考优秀框架的经验,所做的项目有一处场景是使用了数据库采取策略模式。
业务场景:
在我们计算服务费得时候场景比较复杂。有预审服务费,后审服务费,向中标人收取服务费,向投标人收取服务费.....以后还会接着改造,传统的做法写if,else呗,只要增加一种策略就加个else if,减一个策略就删一个else if。但这样明显太low。
代码重构:
首先定义一个接口,接口定义一个获取服务费的方法。然后不同策略定义不同的实现类,每个实现类重写获取服务费方法。然后在数据库配置不同业务对应的beanName,我们只需要传入业务名就可以获取beanName,然后在调用getBean(beanName)就可以获取不同的实现类。
优点:
增加策略:新增实现类,增加数据库配置
减少策略:删掉实现类,移除数据库配置