对“针对接口编程”的理解
2018-04-02 本文已影响7人
n油炸小朋友
“针对接口编程”真正的意思是“针对超类型编程”,“针对超类型编程”这句话,可以更明确地说成“变量的声明类型应该是超类型,通常是一个抽象类或者是一个接口,如此,只要是具体实现此超类型的类所产生的对象,都可以指定给这个变量。这也意味着,声明类时不用理会以后执行时的真正对象类型!”
比如我们设计一个鸭子类,鸭子有外观()和呱呱叫(),白鸭、黑鸦、橡皮鸭继承鸭子类,白鸭的外观是白色、黑鸭外观是黑色、橡皮鸭外观是黄色橡皮,白鸭和黑鸭的叫声是呱呱(),橡皮鸭是叽叽叫,所以重写覆盖呱呱叫()。
这么写有个不好,就是呱呱叫()这个方法,有些鸭子可能不是呱呱叫,也可能不叫。这样每次设计一个新的类就要去考虑是不是要重写这个方法,不理想。那么把叫声设计成一个接口呢,这个接口下有个叫()这个方法,鸭子的具体实现类都去实现这个接口,那么这样不同鸭子就可以实现不同的叫声了。
但是这样还是不好,因为还是有很多种鸭子是同样的叫声,这样子设计那么每个类都要实现一次这个方法,就会造成大量代码不能重用。理想的方案是这样的:
鸭子类的设计
我们把鸭子叫这个方法委托给叫声这个接口,根据不同鸭子的叫声的不同,动态的确定不同的叫的方式,这么一来,有了继承的“复用”好处,却没有继承所带来的包袱,代码也可以重用了。