面向对象的六大原则

时间:2022-03-03 17:26:39

前言

看《Android源码设计模式》之前设计模式没怎么接触,代码写的强耦合,复用性可读性都差到极致,于是有了设计模式的学习之路。

设计模式相关的还推荐《敏捷软件开发 — 原则、模式与实践》作者Robert C.Martin和《设计模式 — 可复用面向对象软件的基础》*写的这两本书。前者对设计原则有详细描述,后者主要涉及经典的设计模式讲解。

本文主要引用内容主要出自《敏捷软件开发 — 原则、模式与实践》和《Android源码设计模式》。

面向对象的六大原则

单一职责原则 (Single Responsibility Principle, SRP)

定义

就一个类而言,应该仅有一个引起它变化的原因

开放封闭原则 (The Open - Closed Principle, OCP)

定义

软件实体(类、模块、函数等等)应该是可以扩展的,但是不可修改的

描述

  1. ”对于扩展是开放的“(Open for extension)

    模块的行为是可扩展的,需求改变时我们可以对模块进行扩展,使其满足新行为,也就是说改变模块的功能。

  2. ”对于更改是封闭的“ (Closed for modification)

    对模块进行扩展时,不必改动模块的源码。

抽象

模块可依赖于一个固定却能够描述一组任意个可能性为的抽象体(抽象基类)。


里氏替换原则 (Liskov Substitution Principle, LSP)

定义

父类所实现的子类都能代替实现

老鼠的儿子会打洞


依赖倒置原则 (Dependence Inversion Pinciple, DIP)

定义

  1. 高层模块不应该依赖于底层模块,二者都应该依赖于抽象;
  2. 抽象不应该依赖于细节;
  3. 细节应该依赖于抽象。

接口隔离原则 (Interface Segregation Principle)

定义

  1. 客户端不应该依赖于它不需要的接口;
  2. 类间的依赖关系应该建立在最小接口之上。

目的

系统解开耦合,从而容易重构、更改和重新部署。


迪米特原则 (Law of Demeter, LOD)

又称最少认知原则 (Least Knowledge Principle, LKP)

定义

一个对象应该对其他对象有最少的了解。

通俗地讲,一个类应该对自己需要耦合或调用的类知道的最少,类的内部调用或者依赖者没关系,调用者或者依赖者只需要知道它需要的方法即可。