设计模式之美
引言 学习设计模式要回答两个问题: 什么是好代码? —— 见 §02。 怎样写出好代码? —— 面向对象、设计原则、设计模式、编程规范、代码重构这五件套各管一段,见 §03。 KISS 原则人人会背,难的是判断"多简单算简单"。后面所有内容都在给这类判断提供尺子。 02 代码质量:把 30 个形容词压成 2 个问题 书里列了 30 多个评价代码的英文词。它们都可以归到三层: 层面 关心的问题 代表属性 编码层 当下能不能读懂 readability、simplicity、clean 模块层 改动能不能控制住 maintainability、testability、reusability 系统层 长期能不能演进 extensibility、flexibility、scalability 剥到最里面,只剩两个问题: 改一行,要扫几个文件? —— 决定可维护性、可测试性。 加一个新需求,是插一段,还是重写? —— 决定可扩展性、灵活性。 其余术语的定位: flexibility 是结果不是属性:易扩展 / 易复用 / 易用三者满足任一即可称"灵活"。 elegant / good / clean 偏主观,不构成评价维度,适合表态不适合度量。 robustness / reliability / scalability 描述运行时行为,属于架构而非代码质量。 DRY 是手段不是目标:复用是结果,过早抽象反而降低可维护性。 边界:可读性和可维护性常被混用。可读性是"读"的成本,可维护性是"改"的成本。一段代码可以读得懂但改不动(逻辑分散在 10 个文件),反之少见。 03 五件套:面向对象 / 设计原则 / 设计模式 / 编程规范 / 代码重构 工具 解决什么 抽象层次 关键内容 面向对象 复杂程序的组织方式 最高 封装、抽象、继承、多态(§04~§10) 设计原则 写代码时的判断依据 高 SOLID、DRY、KISS、YAGNI、LOD 设计模式 反复出现的设计问题 中 23 种,分创建型 / 结构型 / 行为型 编程规范 可读性 低 命名、注释、函数长度、模块划分 代码重构 代码质量不下降的兜底 低 单元测试为前提,分大重构 / 小重构两种规模 依赖关系: ...