策略模式:定义了算法族,分别封装起来,让他们之间可以互相替换。此模式让算法的变化独立于使用算法的客户。
上图是百度百科对策略模式的图解,可以理解为一个Context为策略的外部封装类,或者说是策略的容器类,Strategy则是策略,其下的三个类则为三种分配策略,接下来用具体代码讲解:
首先Duck属于上图中的Context,而FlyBehavior和QuackBehavior两个接口则为两种策略模式, 其下的类则为具体的实现类。在主函数中通过实例Context(即Duck),运用不同的策略实现
这里着重介绍一下duck作为一个抽象类区别于接口是由于在抽象类中可以有方法实现,接口不能存在方法的实现,通过在MallardDuck中继承Duck类并实例化策略类。关于抽象类和接口的具体区别可查看https://segmentfault.com/a/1190000016415014