一、面向对象的设计原则
二、开闭原则
- Open(Open for extension)
- 模块的行为必须是开放的、支持扩展的,而不是僵化的
- Closed(Closed for modification)
- 在对模块的功能进行扩展时,不应该影响或大规模地影响已有的程序模块
- 绝大部分的设计模式都符合开闭原则
- 抽象化是开闭原则的关键
要求开发人员可以在不修改系统中现有的功能代码的前提下,而实现对应用系统的软件功能进行扩展
三、单一职责原则
- 高内聚性原则
- 避免相同的职责(也称为功能)分散到不同的类中实现
- 避免一个类承担过多的职责。
- 类的设计主要工作是“发现职责”并“分离职责”
四、里氏替换原则
- 针对继承的设计原则
- 子类型必须能够替换掉它们的父类型、并出现在父类能够出现的任何地方。
- 子类可以扩展父类的功能,但不能改变父类原有的功能
- 子类可以实现父类的抽象方法,但不能覆盖父类的非抽象方法。
- 子类中可以增加自己特有的方法。
- 当子类的方法重载父类的方法时,方法的前置你件(既方法的形参)要比父类方法的输入参数更宽松
- 当子类的方法实现父类的抽象方法时,方法的后置条件(既方法的返回值)要比父类更严格
五、依赖倒置原则
- 将依赖关系倒置为依赖接口
- 上层模块不应该依赖于下层模块,它们共同依赖于一个抽象
- 父类不能依赖子类,它们都要依赖抽象类
- 抽象不能依赖于具体,具体应该要依赖于抽象
六、接口隔离原则
- 一个类对另外一个类的依赖性应当是建立在最小的接口上
- 客户端不应该依赖那些它不需要的接口(方法)
- 用多个专门的接口,而不使用单一的总接口
- 一个接口就只代表一个角色
- 使用接口隔离原则拆分接口时,首先必须满足单一职责原则
七、合成复用原则
- 又称为组合/聚合复用原则
- 尽量使用对象组合,而不是继承来达到复用的目的
- 一个新的对象里通过关联关系(包括组合关系和聚合关系)来使用一些已有的对象
- 新的对象通过委派调用已有对象的方法达到复用其已有能的目的
- 组合/聚合复用:耦合度相对较低,选择性地调用成员对象的操作;可以在运行时动态进行。(“黑箱”复用)
八、迪米特法则
- 要求一个软件实体应当尽可能少的与其他实体发生相互作用
- 又称为最少知识原则
- 不要和“陌生人”说话
- 只与你的直接朋友通信
- 每一个软件单位对其他的单位都只有最少的智识,而且局限于那些与本单位密切相关的软件单位
九、小结
单一职责原则:要求在软件系统中,一个类只负责一个功能领域上的相应职责
开闭原则:要求一个软件实体应当对扩展开放,对修改关闭,既在不修改源代码的基础上扩展一个系统的行为
里氏替换原则:可以通谷表述为在软件中如果能够使用基类对象,那么一定能够使用其子类对象。
依赖倒转原则:要求抽象不应该依赖于细节,细节应该依赖于抽象;要针对接口编程,不要针对实现编程。
接口隔离原则:要求客户端不应该依赖地些它不需要的接口,即将一些大的接口细化成一些小的接口供客户端使用
合成复用原则:要求复用时尽量使用对象组合
迪米特法则:要求一个软件实体应该尽量可能少的与其它实体发生相互作用