单一职职责:一个类引起他变化的原因仅有一个。(手机什么功能都有,但是都不专业) 开放封闭:对于拓展是开放的,对于更改是封闭的。(考研的时候可以投简历,考验计划是封闭的,课余时间是拓展开放的) 依赖倒转:高层模块不应该依赖低层模块,两个应该依赖抽象;抽象不能依赖细节,细节应该依赖抽象。(1、针对接口编程而不是针对实现编程,无论主板、CPU、内存、硬盘都是在针对接口设计,如果针对实现设计,内存就要对应到具体的某个品牌的主板,那么换内存就不方便了。2、把访问数据库的代码写成函数,每次做项目是就调用这些函数,这就是高层依赖低层模块,这是不可取的,举个例子:我们做新项目时,发现业务逻辑的高层模块都是一样的,但客户端却希望使用不同的数据库,我们当然希望复用这些高层模块,可是他们与低层模块绑定在一起,无法复用) 里氏代换:子类型必须能够替换掉他们的父类型。(鸟类,鸟可以飞,企鹅不会飞,企鹅不能以父类鸟类的身份出现,企鹅不能继承鸟类) 迪米特法则:如果两个类不必彼此直接通信,那么这两个类就不应该发生直接的相互作用。如果一个类需要调用另一个类的某一个方法的话,可以用过第三者转发这个调用。(小菜第一天到公司不认识IT部的人,应该让经理打电话给IT部帮小菜装电脑) 合成复用:尽量使用合成聚合,尽量不要使用类继承。(手机中的游戏,通讯录,mp3这些都是软件,让他们与手机的耦合分离,而是通过聚合/组合来完成需求,这样减少了耦合性)