HeadFirsts设计模式中的Duck

来源:互联网 发布:premium知乎 编辑:程序博客网 时间:2024/04/30 13:42

      HeadsFirst中开始的Duck实现模式是采用的策略模式,在讲解Duck的实现过程,该书提到了设计模式的两个规则,一是:封装不变的,分离变化的,二是:针对接口编程而不是针对实现编程。

      那么Duck的实现是如何履行这两个规则的呢?首先建立一个Duck基类,以后所有的Duck子类均是派生自该基类,而在Duck中就需要考虑到那些属性是所有的Duck子类都拥有的,而那些属性是根据不同的子类而变化的,在需求中了解到所有的鸭子都是会游泳的,不同种类的鸭子叫声不同,部分鸭子具有飞行的属性。因此根据第一个规则,我们可以将游泳属性封装到Duck基类中,而将叫声以及飞行属性分离出来。那么如何分离出来呢,这里又需要用到的二个规则,针对接口编程(本人对这个说法有点模糊,不知道个人的理解是否正确)。首先将叫声和飞行属性定义为接口,在接口中约束需要实现的方法,然后根所有不同的叫声,以及飞行状态来编写具体的实现类,当实现类众多时,我们可以定义一个接口类型的变量作为具体实现类的容器。

接下来看看详细的代码:

duck基类及子类

行为接口以及其实现类

 

调用方式:

 

当出现新的需求时,我们需要在DUCK类中添加新的属性,并且需要了解该属性是不是所有的duck子类都拥有该属性,如果是所有的duck都具备该属性,我们可以再DUCK中实现,否则可以像飞行以及叫声行为那样通过接口来实现这些功能。

原创粉丝点击