开闭原则
含义:当应用程序的需求修改时,在不修改源代码的情况下,可以扩展功能模块,从而满足需求。
一句话:软件中的对象(类,模块,函数等等)对扩展开放,对修改关闭。
里氏替换原则
含义:子类可以扩展父类的功能,但不能改变父类原有的功能
解释:
(1) 子类可以实现父类的抽象方法,但不能覆盖父类的非抽象方法。
(2) 子类中可以增加自己特有的方法。
(3) 当子类的方法重载父类的方法时,方法的前置条件(即方法的形参)要比父类方法的输入参数更宽松。
(4)当子类的方法实现父类的抽象方法时,方法的后置条件(即方法的返回值)要比父类更严格。
依赖倒置原则
含义:高层模块不应该依赖低层模块,两者都应该依赖其抽象;抽象不应该依赖细节,细节应该依赖抽象。
一句话:要面向接口编程,不要面向实现编程。
解释:
1. 每个类尽量提供接口或抽象类,或者两者都具备。
2. 变量的声明类型尽量是接口或者是抽象类。
3. 任何类都不应该从具体类派生。
4. 使用继承时尽量遵循里氏替换原则。
单一职责原则
含义: 一个类应该有且仅有一个引起它变化的原因,否则类应该被拆分
一句话:一个类干一件事(对象层面)
接口隔离原则(懵懂)
含义:客户端不应该被迫依赖于它不使用的方法 体会:接口功能细化,不要要臃肿庞大
迪米特法则
含义:只与你的直接朋友交谈,不跟“陌生人”说话。如果两个软件实体无须直接通信,那么就不应当发生直接的相互调用,可以通过第三方转发该调用 体会:代理模式
合成复用原则(合/聚合复用原则)
含义:它要求在软件复用时,要尽量先使用组合或者聚合等关联关系来实现,其次才考虑使用继承关系来实现。如果要使用继承关系,则必须严格遵循里氏替换原则。合成复用原则同里氏替换原则相辅相成的,两者都是开闭原则的具体实现规范
一句话总结软件设计七大原则
| 设计原则 | 一句话概括 | 目的 |
|---|---|---|
| 开闭原则 | 对扩展开放,对修改关闭 | 降低维护带来的新风险 |
| 依赖倒置原则 | 面向接口编程 | 利于代码结构的扩展升级 |
| 单一职责原则 | 一个类只干一件事,实现类要单一 | 便于理解,提高代码的可读性 |
| 接口隔离原则 | 一个接口干一件事,接口要精细单一 | 功能解耦,高聚合,低耦合 |
| 迪米特法则 | 不该知道的不要知道,一个类应该保持对其它对象最少的了解,降低耦合度 | 只和朋友交流,不和陌生人说话,减少代码臃肿 |
| 里氏替换原则 | 不要破坏继承体系,子类重写方法功能发生改变,不应该影响父类方法的含义 | 防止继承泛滥 |
| 合成复用原则 | 尽量使用组合或者聚合关系实现代码复用,少使用继承 | 降低代码耦合 |