天天看点

面向对象的“六原则一法则”

六原则

1. 单一职责原则:一个类只做它该做的事情。即“高内聚”。写代码终极原则是“高内聚、低耦合”,即一个代码模块只完成一项功能,能轻易拿到其他系统中使用,这样才能实现软件复用的目标。

2. 开闭原则:软件实体应当对扩展开放,对修改关闭。理想状态下,需要为一软件系统增加新功能时,只需从原来系统派生出一些新类就可以,不需要修改原来的任何一行代码。 开闭的两个要点:①抽象是关键,是重要的扩展点;②封装可变性,将系统中的各种可变因素封装到一个继承结构中。

3. 依赖倒转原则:面向接口编程。一些声明方法的参数类型、方法的返回类型、变量的引用类型,尽可能使用抽象类型而不用具体类型。

4. 里式替换原则:任何时候都可以用子类型替换掉父类型。能用父类型的地方就一定能使用子类型。需要注意的是:子类一定是增加父类的能力而不是减少父类的能力。

5. 接口隔离原则:接口要小而专,绝不能大而全。接口表示能力,那么一个接口只应该描述一种能力,接口也应该是高度内聚的。这样接口被复用的可能性高。Java中的接口代表能力、代表约定、代表角色。

6. 合成聚合复用原则:优先使用聚合或合成关系复用代码。通过继承来复用代码是面向对象程序设计中被滥用得最多的东西。类与类之间简单的说有三种关系:Is-A关系、Has-A关系、Use-A关系,分别代表继承、关联和依赖。关联关系根据其关联的强度又可以进一步划分为关联、聚合和合成,但说白了都是Has-A关系。合成聚合复用原则表达的是优先考虑Has-A关系而不是Is-A关系复用代码。Java的API中滥用继承的例子,如Properties类继承了Hashtable类,Stack类继承了Vector类。

注:任何时候都不要继承工具类,工具类可以拥有并可以使用的,而不是拿来继承的。

一法则

1. 迪米特法则:又叫最少知识原则,一个对象应当对其他对象有尽可能少的了解。即如何做到“低耦合”。