策略模式,顾名思义就是提供一些列的策略可供选择。
这些策略是平级的可以互相替换的,比如在ppt中有很多的模板,这些模板就可以称之为策略,这些模板之间是平级的,用户可以自己选择需要的模板(策略)。
设想这样一种情况,一个基类,有很多的子类,每个子类都重写了父类中的某个方法,子类的实现方式不同,其中还存在一些子类实现方式相同。
如果我们为每一种子类都实现这个方法,那么其中有一些子类的实现方式就是相同的,即造成了重复代码的情况,但是如果把这个实现写在父类里,又会导致所有的子类的实现方式变得相同,显然不符合实际情况。
这种情况下,我们就可以把在子类中实现方式相同的一类行为抽象出来形成一个专门的类(策略),这个类只定义了这一类行为的具体实现方式。对于不同的实现方式,就定义不同的实现方式的类(不同的策略)。子类需要哪种实现方式就由子类自己决定。
也就是说每个子类在面对这个方法的实现方式的时候都有一系列的策略可供选择,自己可以选择相应的实现方式。
而且,在有新的子类加入进来需要一种新的实现方式的时候,就可以定义一个新的实现类(策略),有很好的可扩展性。