1、单一职责, 一个类应该只有一个职责,否则耦合。

2、开闭原则, 可扩展不可修改,对于实在要修改的部分,用抽象隔离。

3、依赖倒转原则 高层(调用者)不应该依赖于低层(被调用者),两者都需要依赖于抽象; 抽象不应该依赖细节,细节应该依赖抽象(面向接口) 例子:业务类调用Sqlserver数据类,业务逻辑都封装得很完美,然后此时有新项目了,需要用mysql,此时需要重写mysql数据类,但是业务类完全可复用。那么在新项目中,业务类移植过来后需要把调用SQL数据类的地方都改成调用mysql数据类。如果老项目中业务类调用的是接口,那么新项目中mysql数据类只要继承接口,然后业务代码完全可以不用动。

4、里氏替换原则 把调用父类改为调用子类后,行为没有任何改变。即子类必须能够完全替代父类。 正是由于子类可以完全替换父类,才使得调用父类的模块可以实现无限扩展。 例子:企鹅继承鸟的话,就是违背了里氏替换原则,因为鸟会飞,企鹅不会飞。

5、迪米特法则(最少知识原则):只与直接的朋友通信 如果两个类不必直接通信,那么就不应当发生直接的相互作用,如果需要调用另一个类的方法,可以通过第三者转发调用。 原则: a、尽量降低类和成员的可访问权限。 b、陌生类尽量不要作为局部变量出现的类的内部 c、直接的朋友是指有耦合关系:出现在成员变量、方法参数、返回值中的类

缺点:过分使用会造成很多与业务无关的第三方类,降低通信效率。 优点:耦合度越低,复用率越高。

6、合成/聚合复用原则:尽量使用合成/聚合,尽量不使用继承。 聚合表示一种弱拥有关系,A可以包括B,但B不是A的一部分; 合成表示强拥有关系,体现了 严格的部分和整体的关系,部分和整体的生命周期是一样的。 比方: 鸽子有2只翅膀,翅膀和鸽子则是合成关系。 鸽子属于鸽群,鸽群有多个鸽子,鸽群和鸽子则是聚合关系。 好处:保证每个类都被封装,并集中在单个任务上。这样类的继承规模会很小,不会增长为庞然大物。