这次说说的设计模式是策略模式,什么是策略模式呢。它定义了算法家族,分别封装起来,让它们之间可以互相替换, 此模式让算法的变化,不会影响到使用算法的客户。下面用一幅UML图来说明一下这个关系,这个图属于一个比较典型的策略模式。
这个图我们怎么来理解呢?整个对于Strategy接口(算法)的调用,都是基于Context类来使用,Context类中声明一个Strategy接口的的实现类,这个实现类里面对自己特殊的算法有自己的解释。然后,我们就可以很简单的明白其中的原理了,客户端在调用的时候只需要实例化一个Context对象,在其构造函数里面传入需要的算法即可。这样当需求增加的时候,只需要继续添加Strategy接口的实现类即可,客户端都不需要做任何的修改。
应用实例的说明,我们经常的进行购物,这时候其实就对这种策略模式有很大的需求,因为销售策略会经常的变更和增加,比如增加积分兑换、会员打折、换购商品等等,而且不管是网购还是商场,销售策略总是不断的修改中,这样如果我们在客户端进行条件的判断,就会引起对于客户端的不断修改,这个并不是我们所希望的,所以在策略模式的基础上,添加上简单工厂模式,对于Context类的使用也使用一个Factory来生成,这样在客户端就不需要做任何的修改了。
其实对于策略模式,更多的如何的将业务抽象出方法接口(最好使用方法再能抽象出抽象类)。