标签:
问题1
1. 继承可以实现代码的重用,但子类中需要不断地重载
2. 改做继承接口则无法实现代码复用,无论何时修改某个行为,都必须往下追踪并在每一个定义此行为的类中修改它。
解决办法:单一职能原则,接口隔离原则,合成复用原则。
总之就是总会变化的部分分离出去另行封装,以便以后可以轻易地改变扩展此部分而不影响其他不需要变化的部分。
将鸭子的显示和行为分开,然后鸭子的行为中又将飞行和鸣叫分开
进一步优化:
针对接口编程,而不要针对实现编程:依赖倒转原则
区别:针对”实现“编程:抽象类Animal,及两个具体的实现(Dog,Cat)继承Animal。 Dog d = new Dog(); d.bark();
针对”抽象“编程:接口Animal,及两个具体的实现(Dog,Cat)继承Animal。 Animal animal = new Dog(); animal.makeSound();
只要Animal接口没变,Dog的实现是否发生改变,不会影响到这里的代码。可以完全不关心
更加精简的定义就是“面向接口编程”——OOD(Object-Oriented Design)
标签:
原文地址:http://www.cnblogs.com/wj033/p/4420841.html