六大原则
单⼀职责原则(Single Responsibility Principle)
类的职责应该单⼀,⼀个⽅法只做⼀件事。职责划分清晰了,每次改动到最⼩单位的⽅法或
类。
使⽤建议:两个完全不⼀样的功能不应该放⼀个类中,⼀个类中应该是⼀组相关性很⾼的函
数、数据的封装
⽤例:⽹络聊天:⽹络通信 & 聊天,应该分割成为⽹络通信类 & 聊天类
开闭原则(Open Closed Principle)
对扩展开放,对修改封闭
使⽤建议:对软件实体的改动,最好⽤扩展⽽⾮修改的⽅式。
⽤例:超时卖货:商品价格---不是修改商品的原来价格,⽽是新增促销价格。
⾥⽒替换原则(Liskov Substitution Principle)
通俗点讲,就是只要⽗类能出现的地⽅,⼦类就可以出现,⽽且替换为⼦类也不会产⽣任何错 误或异常。
在继承类时,务必重写⽗类中所有的⽅法,尤其需要注意⽗类的protected⽅法,⼦类尽量不要 暴露⾃⼰的public⽅法供外界调⽤。
使⽤建议:⼦类必须完全实现⽗类的⽅法,孩⼦类可以有⾃⼰的个性。覆盖或实现⽗类的⽅法 时,输⼊参数可以被放⼤,输出可以缩⼩
⽤例:跑步运动员类-会跑步,⼦类⻓跑运动员-会跑步且擅⻓⻓跑, ⼦类短跑运动员-会跑步且 擅⻓短跑
依赖倒置原则(Dependence Inversion Principle)
⾼层模块不应该依赖低层模块,两者都应该依赖其抽象. 不可分割的原⼦逻辑就是低层模式,原 ⼦逻辑组装成的就是⾼层模块。
模块间依赖通过抽象(接⼝)发⽣,具体类之间不直接依赖
使⽤建议:每个类都尽量有抽象类,任何类都不应该从具体类派⽣。尽量不要重写基类的⽅
法。结合⾥⽒替换原则使⽤。
⽤例:奔驰⻋司机类--只能开奔驰; 司机类 -- 给什么⻋,就开什么⻋; 开⻋的⼈:司机--依
赖于抽象
迪⽶特法则(Law of Demeter),⼜叫"最少知道法则"
尽量减少对象之间的交互,从⽽减⼩类之间的耦合。⼀个对象应该对其他对象有最少的了解。
对类的低耦合提出了明确的要求:
只和直接的朋友交流, 朋友之间也是有距离的。⾃⼰的就是⾃⼰的(如果⼀个⽅法放在本类
中,既不增加类间关系,也对本类不产⽣负⾯影响,那就放置在本类中)。
⽤例:⽼师让班⻓点名--⽼师给班⻓⼀个名单,班⻓完成点名勾选,返回结果,⽽不是班⻓点 名,⽼师勾选
接⼝隔离原则(Interface Segregation Principle)
客⼾端不应该依赖它不需要的接⼝,类间的依赖关系应该建⽴在最⼩的接⼝上
使⽤建议:接⼝设计尽量精简单⼀,但是不要对外暴露没有实际意义的接⼝。
⽤例:修改密码,不应该提供修改⽤⼾信息接⼝,⽽就是单⼀的最⼩修改密码接⼝,更不要暴 露数据库操作
从整体上来理解六⼤设计原则,可以简要的概括为⼀句话,⽤抽象构建框架,⽤实现扩展细节,具体 到每⼀条设计原则,则对应⼀条注意事项:
单⼀职责原则告诉我们实现类要职责单⼀;
⾥⽒替换原则告诉我们不要破坏继承体系;
依赖倒置原则告诉我们要⾯向接⼝编程;
接⼝隔离原则告诉我们在设计接⼝的时候要精简单⼀;
迪⽶特法则告诉我们要降低耦合;
开闭原则是总纲,告诉我们要对扩展开放,对修改关闭。