TIP
面向对象的三个基本特征封装、继承、多态。
开闭原则 一个软件实体如类、模块和函数面向扩展开放,面向修改关闭
- 开闭原则有利于进行单元测试
- 开闭原则可以提高复用性
- 开闭原则可以提高可维护性
- 面向对象开发的要求
单一职责原则 一个类只允许有一个职责,即只有一个导致该类变更的原因
- 类的复杂性降低,实现什么职责都有清晰明确的定义
- 可读性提高,复杂性降低,那当然可读性提高了
- 可维护性提高,可读性提高,那当然更容易维护了
- 变更引起的风险降低,变更是必不可少的,如果接口的单一职责做得好,一个接口修改只对相应的实现类有影响,对其他的接口无影响,这对系统的扩展性、维护性都有非常大的帮助。
里氏替换原则 超类存在的地方,子类是可以替换的
- 代码共享,减少创建类的工作量,每个子类都拥有父类的方法和属性
- 提高代码的重用性
- 子类可以形似父类,但是又异于父类。
- 提高代码的可扩展性,实现父类的方法就可以了。许多开源框架的扩展接口都是通过继承父类来完成。
- 提高产品或项目的开放性
迪米特法则(最少知识原则)一个软件实体应当尽可能少的与其他实体发生相互作用
- 减少对象之间的耦合性
接口分离原则 应当为客户端提供尽可能小的单独的接口,而不是提供大的总的
- 避免接口污染
- 提高灵活性
- 提供定制服务
- 实现高内聚
接口依赖倒置原则 实现尽量依赖抽象,不依赖具体实现
- 通过依赖于接口,隔离了具体实现类
- 低一层的变动并不会导致高一层的变动
- 提高了代码的容错性、扩展性和易于维护
组合/聚合复用原则 是通过获得其他对象的引用,在运行时刻动态定义的,也就是在一个对象中保存其他对象的属性,这种方式要求对象有良好定义的接口,并且这个接口也不经常发生改变,而且对象只能通过接口来访问,这样我们并不破坏封装性,所以只要类型一致,运行时还可以通过一个对象替换另外一个对象。 聚合(Aggregation)表示一种弱的‘拥有'关系,体现的是A对象可以包含B对象但B对象不是A对象的一部分。
组合(Composition)则是一种强的'拥有'关系,体现了严格的部分和整体关系,部分和整体的生命周期一样。
- 新的实现较为容易,因为超类的大部分功能可通过继承关系自动进入子类;
- 修改或扩展继承而来的实现较为容易。
参考: JavaScript面向对象三个基本特征实例详解【封装、继承与多态】JavaScript面向对象之七大基本原则实例详解