超类设计中接口的使用

来源:互联网 发布:北京到普吉机票知乎 编辑:程序博客网 时间:2024/04/29 08:47

        这两天看了设计模式,有点了新理解。

     就拿书上的例子来说,若果要你设计一个“鸭子类”,你会怎么设计?

     我相信有人会是这样设计:

            1)叫的行为

            2)飞行的行为(比如野生鸭子就是会飞的)

            3)游泳的行为

 

 此时,你正处于中枪中。原因:不是所有的鸭子都会飞,例如玩具鸭子,叫的行为也不只是呱呱,还有吱吱叫等。

如何解决呢?

解决:因为叫的行为和飞的行为属于动态的,即:是变化的,那么索性就将其分离出来,做成一个接口,利用多态的想法针对不同的鸭子(子类),有不同的叫(或是不叫)

例如:

public duck{

           QuackInf    quack;//叫接口

            FlyInf         fly;//飞行接口

}

当子类继承duck时,将属性quack与fly赋予不同的实现(new 相应的impl),则可得到相应的行为结果,同时使得代码的复用性得到了充分的发挥。

 

1:有人会问:好处不明显啊?即他会说--我就做成一个quack类和fly类,不就行了么?干什么这么麻烦?

      回答:1)首先反问一个问题--当现在不只是呱呱叫和吱吱叫,又新增了一种新款鸭子的叫声例如记为A,你怎么办?

                  我想 你只有修改quack这个类了,同时增加if,与else的判定,当增加一个,你就在quack中增加一个else,你还需要有判断依据。这是一种不可取的方法。

                  2)针对这个问题,要是使用接口的情况,则简单了,你只需要增加一种相应(A)的实现,而调用者并不关心具体的实现,而是利用多态来实现,显的更为方便。

原创粉丝点击