编程进阶网 编程进阶网
首页
  • 计算机原理
  • 操作系统
  • 网络协议
  • 数据库原理
  • 面向对象
  • 设计原则
  • 设计模式
  • 系统架构
  • 性能优化
  • 编程原理
  • 方案设计
  • 稳定可靠
  • 工程运维
  • 基础认知
  • 线性结构
  • 树与哈希
  • 工业级实现
  • 算法思想
  • 实战与综合
  • 算法题考核
  • C语言入门
  • C综合案例
  • C专栏博客
  • C标准集库
  • C++入门教程
  • C++综合案例
  • C++专栏博客
  • C++开发技巧
  • Java入门教程
  • Java综合案例
  • Java专栏博客
  • Go入门教程
  • Go综合案例
  • Go专栏博客
  • Go开发技巧
  • JavaScript入门
  • JavaScript高级
  • Android库解读
  • Android专栏
  • Android智能硬件
  • iOS ObjC入门
  • iOS Swift入门
  • iOS入门精通
  • Web之Html手册
  • Web之TypeScript
  • Web之Vue高级进阶
  • Linux之QML入门
  • Linux之QT核心库
  • Linux实践开发
  • Python教程
  • Shell&Bash教程
  • 工具脚本
  • 自动化脚本
  • 质量保障
  • 产品思考
  • 软实力
  • 开发流程
  • Git应用
  • 技术模版
  • 技术规范
  • Markdown
  • Mermaid
  • 开源协议
  • JSON工具
  • 文本工具
  • 图片处理
  • 文档转化
  • 代码压缩
  • 关于我
  • 自我精进
  • 职场管理
  • 职场面试
  • 心情杂货
  • 友情链接

杨充

专注编程 · 终身学习者
首页
  • 计算机原理
  • 操作系统
  • 网络协议
  • 数据库原理
  • 面向对象
  • 设计原则
  • 设计模式
  • 系统架构
  • 性能优化
  • 编程原理
  • 方案设计
  • 稳定可靠
  • 工程运维
  • 基础认知
  • 线性结构
  • 树与哈希
  • 工业级实现
  • 算法思想
  • 实战与综合
  • 算法题考核
  • C语言入门
  • C综合案例
  • C专栏博客
  • C标准集库
  • C++入门教程
  • C++综合案例
  • C++专栏博客
  • C++开发技巧
  • Java入门教程
  • Java综合案例
  • Java专栏博客
  • Go入门教程
  • Go综合案例
  • Go专栏博客
  • Go开发技巧
  • JavaScript入门
  • JavaScript高级
  • Android库解读
  • Android专栏
  • Android智能硬件
  • iOS ObjC入门
  • iOS Swift入门
  • iOS入门精通
  • Web之Html手册
  • Web之TypeScript
  • Web之Vue高级进阶
  • Linux之QML入门
  • Linux之QT核心库
  • Linux实践开发
  • Python教程
  • Shell&Bash教程
  • 工具脚本
  • 自动化脚本
  • 质量保障
  • 产品思考
  • 软实力
  • 开发流程
  • Git应用
  • 技术模版
  • 技术规范
  • Markdown
  • Mermaid
  • 开源协议
  • JSON工具
  • 文本工具
  • 图片处理
  • 文档转化
  • 代码压缩
  • 关于我
  • 自我精进
  • 职场管理
  • 职场面试
  • 心情杂货
  • 友情链接
  • README
  • 面向对象设计

  • 常见设计原则

    • README
      • 1.系列概述
      • 2.学习路线图
      • 3.文档索引
      • 4.核心知识图谱
      • 5.六大原则速记
      • 6.本专栏的统一结构
      • 7.各篇工作案例速览
      • 8.推荐的阅读路径
      • 9.建议的学习节奏
    • 面向对象六大原则
    • 单一职责原则详解
    • 开闭原则详细介绍
    • 里式替换原则介绍
    • 接口隔离原则介绍
    • 依赖倒置原则介绍
    • 迪米特原则介绍
    • 项目重构演进之路
  • 巧学设计模式

  • 系统架构设计

  • 编程
  • 常见设计原则
杨充
2023-10-23
目录

README

# 常见设计原则系列

# 1.系列概述

本系列深入讲解面向对象设计的 六大原则(SOLID + 迪米特法则),并在最后一篇落到 项目重构 的实战方法论上。从原则的历史由来、核心思想、Java 代码实践到工业级应用,帮助读者建立一套完整的设计思维体系。

  • 适合人群:有一定 Java 基础、希望提升代码设计能力的开发者。
  • 代码语言:统一使用 Java,保证示例前后一致、可直接迁移到工程中。
  • 编排方式:每篇从一个工作中的真实案例切入,结尾回到该案例,形成闭环。

# 2.学习路线图

flowchart LR
    A[入门<br/>01.六大原则总览] --> B[进阶<br/>02-07 逐一深入]
    B --> C[实战<br/>08.项目重构]

    B --> B1[02.SRP + 03.OCP<br/>基础 → 目标]
    B --> B2[04.LSP + 05.ISP<br/>继承约束 + 接口精简]
    B --> B3[06.DIP + 07.LOD<br/>架构方向 + 耦合纪律]
1
2
3
4
5
6
7

# 3.文档索引

序号 文档 核心内容 关键词
01 面向对象六大原则 SOLID 历史由来、ImageLoader 案例演进、原则关系图谱 总览、历史、协同
02 单一职责原则详解 SRP 定义、方法 / 接口 / 类 / 模块四层面、内聚度量化 SRP、内聚、拆分
03 开闭原则详细介绍 OCP 定义、Meyer vs Martin、折扣策略案例、插件式架构 OCP、扩展、抽象
04 里式替换原则介绍 LSP 定义、契约式设计、正方形悖论、协变逆变、四条核心规则 LSP、契约、继承
05 接口隔离原则介绍 ISP 定义、角色接口 vs 头接口、API 设计、粒度度量 ISP、角色接口
06 依赖倒置原则介绍 DIP 定义、"倒置"详解、三个层次、IoC 容器、整洁架构 DIP、IoC、抽象
07 迪米特原则介绍 LOD 定义、火车残骸反模式、门面模式、事件驱动解耦 LOD、解耦、朋友
08 项目重构演进之路 22 种代码坏味道、圈复杂度、重构 Checklist、设计原则 ↔ 重构手法映射 重构、坏味道、度量

# 4.核心知识图谱

mindmap
  root((设计原则<br/>知识体系))
    SOLID 五原则
      SRP 单一职责
      OCP 开闭原则
      LSP 里式替换
      ISP 接口隔离
      DIP 依赖倒置
    迪米特法则
      高内聚
      低耦合
      最少知识
    重构实践
      代码坏味道
      安全重构手法
      持续重构
    共同目标
      高内聚 / 低耦合
      易扩展 / 可维护
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

# 5.六大原则速记

原则 一句话 核心关键词
SRP 一个类只有一个变化原因 职责单一
OCP 对扩展开放,对修改关闭 抽象扩展
LSP 子类替换父类,行为不变 契约守护
ISP 接口小而专,不强迫依赖 精简隔离
DIP 依赖抽象,不依赖实现 面向接口
LOD 只和直接朋友通信 最少知识

# 6.本专栏的统一结构

为了让整个专栏 前后连贯、由浅入深、风格统一,每一篇(01 ~ 08)都按下面这套骨架编排,方便对照阅读:

flowchart TD
    S1[1.工作中的一个真实案例<br/>终端开发视角,屏蔽平台细节] --> S2[2 ~ N.原则定义 + 多层次展开<br/>+ Java 示例 + 深度剖析]
    S2 --> S3[N+1.回到开篇案例<br/>用学到的东西解决开篇的问题]
    S3 --> S4[N+2.本篇收获<br/>5 ~ 8 条,一句话一条]
    S4 --> S5[N+3.思考题<br/>3 道,带答案指引]
    S5 --> S6[N+4.课后作业<br/>5 步,可落地执行]
    S6 --> S7[N+5.更多内容推荐]
1
2
3
4
5
6
7

# 7.各篇工作案例速览

序号 工作案例 痛点 对应原则
01 图片加载类从 50 行膨胀到 1200 行 上帝类、不可维护 SOLID 综合
02 2000 行的"详情页上帝类" 改动扩散、测试难 SRP
03 促销折扣 if-else 从 V1 堆到 V5 每加一种促销就动老代码 OCP
04 PhoneInput 继承 BaseInput 静默吞事件 子类不能替换父类 LSP
05 30 方法胖 SDK,新增方法编译全炸 实现者被迫关心无关方法 ISP
06 380 处 import 第三方网络库,换库改两个月 上层依赖下层细节 DIP
07 getUser().getAddress().getCity() 抄到 31 个文件 穿透对象图,牵一发动全身 LOD
08 "首页 tab 从 4 改 5"花了 4 天 债滚债、无测试、无度量 重构

# 8.推荐的阅读路径

按顺序阅读(强烈推荐,适合系统学习):

flowchart LR
    A[01 总览] --> B[02 SRP]
    B --> C[03 OCP]
    C --> D[04 LSP]
    D --> E[05 ISP]
    E --> F[06 DIP]
    F --> G[07 LOD]
    G --> H[08 重构实战]
1
2
3
4
5
6
7
8

按问题驱动(适合带着痛点来查):

  • 代码臃肿、类太大 → 02 SRP
  • 每加功能都要改老代码 → 03 OCP
  • 继承用错了、子类出 bug → 04 LSP
  • 接口太胖、空实现一堆 → 05 ISP
  • 想换底层实现但改不动 → 06 DIP
  • 链式调用穿透对象图 → 07 LOD
  • 老项目积了一屁股债 → 08 重构

按角色定位:

  • 初级开发:01 → 02 → 03,先掌握 SRP / OCP 两大基石
  • 中级开发:全部 8 篇按顺序
  • 高级开发 / 架构:重点看每篇的"深度剖析"与 08 重构
  • Code Reviewer:重点看每篇的"反模式 / 坏味道"清单

# 9.建议的学习节奏

每天 1 小时,8 天学完:每天 1 篇,读完正文后 务必完成当天的思考题和课后作业——读懂和会用之间隔着作业量。

每周 1 篇,渐进内化:每周选 1 篇,把作业落地到自己的项目里。8 周后你会发现,同一个项目的新增代码风格已经发生了根本变化。

上次更新: 2026/06/17, 11:43:57
综合实战图片框架
面向对象六大原则

← 综合实战图片框架 面向对象六大原则→

最近更新
01
信号崩溃快速排查
06-15
02
CoreDump破案
06-15
03
perf火焰图实战
06-15
更多文章>
Theme by Vdoing | Copyright © 2019-2026 杨充 | MIT License | 桂ICP备2024034950号 | 桂公网安备45142202000030
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式