策略模式 Strategy Pattern
策略模式:定义了算法族,分别封装起来,让他们之间可以互相替换,此模式让算法的变化独立于使用算法的客户.
三个原则:
1.找出应用中可能变化之处.把他们独立出来.不要和那些不需要变化的代码混在一起.
这样可避免将代码硬编码进实现类中.实现代码的复用.减少累赘代码
2.针对接口编程.而不是针对实现编程(面对接口的实现类可替换,我们不关心实现类到底如何实现)
使程序具有更高的灵活性.
3.多用组合.少用继承(实现)
将接口或父类作为成员变量编入类中,这样可以避免继承的缺点.(如必须实现一些我们不需要的方法),而且可以根据需要使用接口或父类的不同子类型实例化它.具有更高的灵活性
1.Duck类中可变化的fly及quack独立出来写成接口.不同的Duck有不同的fly和quack.他们的功能来自实现了fly和quack接口的实现类
2.我们不关心fly和quack接口的实现类.他们是可变.可替换.可删减的.我们关心的是fly和quack接口.因为只要是实现了这些接口的实现类.我们都接受他.可以拿来用
3.组合:将fly和quack接口作为两个成员变量写入Duck父类中.而不是用Duck父类去实现fly和quack接口.然后不同的Duck子类继承Duck父类.只要在构造方法或者Setter方法中将接口的下层实现对象赋给fly和quack接口成员变量(实例化下层接口实现类).就能达到不同的Duck子类有不同的fly和quack行为这种多态的目的