摘取代码中变化的行为,形成接口
在设计基类的时候,如果该类某个成员方法在子类中的实现变化差别比较大(一部分子类实现该方法是相同的),作为基类有两个问题:一是该方法不再通用;二是子类如果重写该方法,存在代码重复的情况。如果只是把该方法设计成抽象方法,只能解决第一个问题,无法解决第二个问题。对于这类问题,最好的做法是把这种方法设计为接口。
多用组合,少用继承
针对第一条原则,把这种接口作为抽象类的属性,可以有效减少代码的冗余。
针对接口编程,不依赖于具体实现
如果对一个类型有依赖,应该尽量依赖接口,尽量减少依赖子类。因为子类一旦变化,代码变动的可能性比较大,而接口比较稳定。在具体代码实现中,体现在方法参数尽量使用接口,方法的返回值尽量使用接口,属性类型尽量使用接口等。
针对扩展开放,针对改变关闭
如果项目中的需求发生变化,应该添加一个新的接口或者类,而不是要去修改原有的代码。