【学习笔记】《设计模式之美》导读

写在学习之前

From 《Head First 设计模式》

  • 如何欺骗大脑“这是一件非常重要的必须记住的事情”:
  1. 大量重复
  2. 尽可能调动大脑思考
  • 图中嵌入文字,思考图文关系
  • 交谈式风格(对白),而不是听报告(干巴巴)
  1. 新鲜感:以不同方式表述
  2. 实践练习


  • Tips:
  1. 欲速则不达,思考理解越多,需要记忆的越少
  2. 练习+笔记(让阅读的速度慢下来
  3. 阅读There are no Dumb Questions部分
  4. 学习一段时间之后别再学有难度的东西,给大脑留出处理和记忆知识的时间
  5. 多喝水
  6. 大声说出来
  7. 学不进去时,休息一会儿
  8. 融入到书中的故事里
  9. 应用到新项目中


1. 设计模式学习导读

  1. 知识是用来解决问题的,而不是用来记忆考试的

    • 即便细节记不清了,只需要稍微查看一下资料,就能全部回忆起来。
  2. 学习对能力的锻炼,比单纯的知识记忆要有意义得多

    • 最基础的自学能力、理解能力、逻辑思维能力
    • 时间空间复杂度分析能力、分析发现解决代码问题能力
  3. 忘记并不等于就白学了,学习对于一个人的影响是潜移默化的

    • 你要相信,它总有一天会发挥作用的,机会都是给有准备的人,我们要学会“延迟满足”。


1.1. 为什么要学习设计模式?

  1. 应对面试
  2. 告别代码
  3. 编写易扩展、易用、易维护的高质量代码
  4. 读源码、学框架
  5. 胜任技术 leader


1.2. 从哪些维度评价代码质量?

  1. 可维护性(maintainability)★

    • 主观评价:bug 容易修复,修改、添加功能能够轻松完成
  2. 可读性(readability)★

    • 代码符合编码规范、命名达意、注释详尽、函数长短合适、模块划分清晰、符合高内聚低耦合……(通过同事的 code review
  3. 可扩展性(extensibility)★

    • 不需修改原有代码,将新功能直接插到代码预留的功能扩展点上
  4. 灵活性(flexibility)

    • 一段代码易扩展、易复用或者接口易用 → 灵活
  5. 简洁性(simplicity)

    • KISS 原则:“Keep It Simple,Stupid”
  • 代码简单、逻辑清晰
  1. 可复用性(reusability)

    • 设计原则 DRY(Don’t Repeat Yourself)
  2. 可测试性(testability)

    • 易写单元测试
    • 从侧面准确反映代码质量
        简洁性 → 可读性 → 可维护性
                可扩展性↗

        可扩展性↘
                灵活性
        可复用性↗


1.3. 面向对象、设计原则、设计模式、编程规范、重构有何关系?

面向对象(设计思想)

  • 四大特性:封装、抽象、继承、多态
  • 面向对象编程与面向过程编程的区别和联系
  • 面向对象分析、面向对象设计、面向对象编程
  • 接口抽象类的区别以及各自的应用场景
  • 基于接口而非实现编程的设计思想
  • 多用组合少用继承的设计思想
  • 面向过程的贫血模型和面向对象的充血模型


设计原则

  • SOLID 原则 - SRP 单一职责原则
  • SOLID 原则 - OCP 开闭原则
  • SOLID 原则 - LSP 里式替换原则
  • SOLID 原则 - ISP 接口隔离原则
  • SOLID 原则 - DIP 依赖倒置原则
  • DRY 原则、KISS 原则、YAGNI 原则、LOD 法则
  1. 设计初衷
  2. 能够解决的问题
  3. 应用场景


设计模式

开发初期不要使用复杂的设计模式,代码出现问题再进行重构

  • 创建型

常用:单例模式、工厂模式(工厂方法和抽象工厂)、建造者模式

不常用:原型模式

  • 结构型

常用:代理模式、桥接模式、装饰者模式、适配器模式

不常用:门面模式、组合模式、享元模式

  • 行为型

常用:观察者模式、模板模式、策略模式、职责链模式、迭代器模式、状态模式

不常用:访问者模式、备忘录模式、命令模式、解释器模式、中介模式

  1. 能够解决的问题
  2. 应用场景
  3. 不过度应用


编程规范

最能改善代码质量的 20 条规范


代码重构

  • 重构的目的(why)、对象(what)、时机(when)、方法(how)
  • 保证重构不出错的技术手段:单元测试和代码的可测试性
  • 两种不同规模的重构:大重构(大规模高层次)和小重构(小规模低层次)


总结

  • 面向对象中的继承、多态可复用性
  • 编码规范可读性
  • 设计原则中的单一职责、DRY、基于接口而非实现、里式替换原则等可复用性、灵活性、可读性、可扩展性、可维护性
  • 设计模式可扩展性
  • 持续重构可维护性
  • 面向对象编程(丰富特性:封装、抽象、继承、多态) → 复杂的设计思路 → 设计原则、设计模式的基础
  • 设计原则(抽象) → 代码设计经验 → 指导设计模式
  • 设计模式(具体) → 针对设计问题的解决方案
  • 编程规范(更细节)持续的小重构的理论基础
  • 重构 → 保持代码质量不下降 → 重构工具:面向对象、设计原则、设计模式、编码规范

你可能感兴趣的:(【学习笔记】《设计模式之美》导读)