这两天看了设计模式,有点了新理解。
就拿书上的例子来说,若果要你设计一个“鸭子类”,你会怎么设计?
我相信有人会是这样设计:
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)的实现,而调用者并不关心具体的实现,而是利用多态来实现,显的更为方便。