单一职责原则:
一个类只作它该做的事情。高内聚,低耦合。一个模块只完成一项功能,一个对象如果承担过多的职责,那么注定什么也干不好
开闭原则:
软件实体对扩展开发,对修改关闭。当我们对原系统进行扩展时,只需要从原来的系统派生出一些新类即可。抽象是关键,没有抽象类或接口,就没有扩展点。封装可变性,将系统种的各种可变因素封装到一个继承结构种。
依赖倒转原则:
面向接口编程,尽可能使用抽象类而不是具体类,尽可能使用接口,而不是实现方法。方便重写更改。
里氏替换原则:
任何时候使用子类型替换父类型,使用用父类的方法的地方,一定要使用子类型。里氏替换原则可以检查继承关系是否合理,如果一个继承关系违背了里氏替换原则,那么这个继承关系一定是错误的,需要对代码进行重构。
需要注意的是:子类一定是增加父类的能力而不是减少父类的能力,因为子类比父类的能力更多,把能力多的对象当成能力少的对象来用当然没有任何问题。
List list = new ArrayList();整体是一个多态的体现。右方是里氏替换原则
接口隔离原则:
接口要小而专,而不是大而全,接口表示能力,且只描述一种能力,增加复用性,几个功能就实现几个接口,这样的话每个接口被复用的可能性是很高的。
合成聚合复用原则:
优先使用聚合或合成关系复用代码。
一般来说类与类一般有三个关系has a,is a,use a。分别代表继承,关联和依赖。其中关联关系根据关联的强度进一步划分成关联,聚合,和合成。但说白了都是has a的关系。说白了就是优先考虑has a关系不是is a的关系。记住任何时候都不要继承工具类,工具是拥有并可以使用的,而不是拿来继承的
迪米特法则
最少知识法则,一个对象应尽量对其他对象尽可能少的了解,降低耦合度。用对应的接口,做对应的事情