里氏替换原则
凡基类适用的地方,子类一定适用。子类可以直接替换基类。
依赖倒转原则
要依赖于抽象不要依赖于具体。
要针对接口编程
- 依赖倒转虽然强大,却不容易实现。而且维护这样的系统需要很好的面向对象的设计知识;
- 并且并不是所有类都会发生变化,一些相当稳定的类,就不必有抽象类型。
联合适用java接口和java抽象类
java接口用来声明类型定义规则,抽象类做默认实现,具体实现类就直接继承抽象类,这样就直接拥有了默认实现。
如果接口需要新增方法了,那么就可以直接,在抽象类中做默认实现,这样,所有的子类就都得到了这个具体方法。
例子有很多 Map、List、Set
接口隔离原则
使用多个专门的接口比使用单一的总接口好。
尽量控制对外接口,
定制服务:不要向客户端提供不需要的方法。对外的接口要控制接口的宽度。
合成聚合复用原则
要尽量使用合成聚合,尽量不要使用继承。
缺点:这种复用建造的系统需要更多的对象需要管理。
迪米特法则
一个对象应当对其他对象有尽可能少的了解。
例:某人、朋友、陌生人,某人不应直接与陌生人相互作用,而应该是某人与朋友相互作用,朋友与陌生人相互作用。这时候就是朋友将某人对陌生人的调用转发给了陌生人 –这就是调用转发。
具体参见 门面模式、调停者模式。
广义的迪米特法则:对象之间的信息流量、流向、信息的影响的控制。
好的设计是将实现的细节隐藏起来,就是封装;
设计时应当注意一下几点:
1. 应当创建弱耦合的类;
2. 结构上降低成员的访问权限;尽量private
3. 设计上尽量设计成不变类;final
4. 对其它对象的引用应当降低到最低;
5. 变量只在使用的时候声明(尽量设置小的局域变量)