1 设计一个超类 SuperDuck 他有
Quack()
Swim()
等方法
好处 :这样所有继承自这个超类的 特殊鸭子类都具有了相同的方法。而且结合多态,可以实现动态创建。
弊端 : 而且在基类中的任何改变都会在子类中体现。 但这样做有一个弊端 就是 子类如果不想用基类的方法,那么它必选要覆盖基类的方法。 这杨会导致,我有一个新的继承类的时候必须要检查基类中有那些方法是必须要覆盖(重写)的。
2 改进
设计一个具备通用方法的基类 和一些特殊含有特殊方法的接口。
让其它类继承这个通用方法类和 实现特殊的接口(可以实现多个)。
这样做的
好处: 继承的基类只是继承了一些通用的方法。新家一个类的时候就不必过多考虑我需要覆盖(重写)基类中的那些方法。
弊端: 这样做会带来代码的重复。比如有一个fly的方法,它不是通用方法,但也有很多的类需要这个方法。如果它也有很多的共性的地方,那么还是需要在很多的子类中去修改。
3 改进
一个设计原则
1 找出应用中可能需要变化之处,把他们独立出来,不要和那些不需要变化的代码混在一起。
2 针对接口编程而不是针对
这里的方法是设计一些实现类 来实现一些特殊的接口方法
需要的支撑条件:
{ 接口中声明 实例变量 然后子类中去给这个实例变量赋值 这里有个问题 delphi在接口中可以定义实例变量么? 好像不能。不过可以定义属性。在接口中声明属性。在实现类中实现这个属性对应的接口的方法(为了实现这个方法,通常需要在实现类中声明这个接口的一个实例变量)}
好像不是 基类不是接口 基类是一个抽象类 这样就可以在在基类中声明实例变量 。定义抽象方法。
在子类中给实例变量赋值 并且实现抽象方法。