策略者模式的目的就是在封装了一系列的功能或算法,供外界去调用,而外界对这些都感受不到.
应用的场景是:
可以为一个类提供一系列的不同的算法或者是行为方式,而这些算法和行为方式是有相关性的.这样就避免了创建一系列的相关的类,只用一个就搞定了,而且外界在调用的时候并不会感知到这个类的内部的复杂性.
然后就是说我们希望为一个类的某种功能提供一系列的不同的行为.这个其实和上面那一条大概一样吧,就是我们可以在类的内部去改变它的行为方式而不需要创建多个相关的类,外界在调用这个类的时候也不会感到它的复杂性.
然后它的实现方式大概是:
1.在一个类中存储这个策略的一个实例,然后可以在运行的过程中修改这个实例,达到改变行为方式的目的.
2.策略这实例一般是一个接口的实例,当然也可以是一个抽象类的实例,这样在类的内部通过多态来调用就可以在更换策略的时候不用修改主干代码.
3.最后就是通过这个策略的接口去实现不同的子类,提供不同的行为方式.
4.然后想说的是在昨天看的Splitter这个类中,一方面在使用策略模式在修改自己的行为方式,一方面它每当修改一次策略,都在返回一个新的Splitter类,这其实对于这个类来说有很多好处:一是可以通过这个方法来使类开始计算后提供统一的行为方式.二是实现了线程的安全,当另一个线程去更改策略的时候,并不会对当前线程的计算造成影响.恩,要多学习这种设计思路.