NipGeihou's blog NipGeihou's blog
  • Java

    • 开发规范
    • 进阶笔记
    • 微服务
    • 快速开始
    • 设计模式
  • 其他

    • Golang
    • Python
    • Drat
  • Redis
  • MongoDB
  • 数据结构与算法
  • 计算机网络
  • 应用

    • Grafana
    • Prometheus
  • 容器与编排

    • KubeSphere
    • Kubernetes
    • Docker Compose
    • Docker
  • 组网

    • TailScale
    • WireGuard
  • 密码生成器
  • 英文单词生成器
🍳烹饪
🧑‍💻关于
  • 分类
  • 标签
  • 归档

NipGeihou

我见青山多妩媚,料青山见我应如是
  • Java

    • 开发规范
    • 进阶笔记
    • 微服务
    • 快速开始
    • 设计模式
  • 其他

    • Golang
    • Python
    • Drat
  • Redis
  • MongoDB
  • 数据结构与算法
  • 计算机网络
  • 应用

    • Grafana
    • Prometheus
  • 容器与编排

    • KubeSphere
    • Kubernetes
    • Docker Compose
    • Docker
  • 组网

    • TailScale
    • WireGuard
  • 密码生成器
  • 英文单词生成器
🍳烹饪
🧑‍💻关于
  • 分类
  • 标签
  • 归档
  • 设计模式之美

    • 读薄《设计模式之美》-导读
      • 为什么学习设计模式?
      • 如何评价代码质量的高低?
      • 最常用的评价标准有哪几个?
      • 如何才能写出高质量的代码?
      • 面向对象
      • 设计原则
      • 设计模式
        • 创建型
        • 结构型
        • 行为型
      • 编程规范
      • 代码重构
      • 面向对象、设计原则、设计模式、编程规范和代码重构,这五者的关系
    • 读薄《设计模式之美》-理论
  • 怪诞行为学

  • 读书笔记
  • 设计模式之美
NipGeihou
2022-10-16
目录

读薄《设计模式之美》-导读

# 为什么学习设计模式?

  1. 应对面试中的设计模式相关问题
  2. 告别写被人吐槽的烂代码
  3. 提高复杂代码的设计和开发能力
  4. 让读源码、学框架事半功倍
  5. 为你的职场发展做铺垫

# 如何评价代码质量的高低?

代码质量的评价有很强的主观性,描述代码质量的词汇也有很多,比如可读性、可维护性、灵活、优雅、简洁等,这些词汇是从不同的维度去评价代码质量的。它们之间有互相作用,并不是独立的,比如,代码的可读性好、可扩展性好就意味着代码的可维护性好。代码质量高低是一个综合各种因素得到的结论。我们并不能通过单一的维度去评价一段代码的好坏。

# 最常用的评价标准有哪几个?

  1. 可维护性(maintainability):在不破坏原有代码设计、不引入新的 bug 的情况下,能够快速地修改或者添加代码。
  2. 可读性(readability):代码是否符合编码规范、命名是否达意、注释是否详尽、函数是否长短合适、模块划分是否清晰、是否符合高内聚低耦合等等。
  3. 可扩展性(extensibility):在不修改或少量修改原有代码的情况下,通过扩展的方式添加新的功能代码。
  4. 灵活性(flexibility):如果一段代码易扩展、易复用或者易用,我们都可以称这段代码写得比较灵活。
  5. 简洁性(simplicity):KISS 原则:“Keep It Simple,Stupid”。
  6. 可复用性(reusability):尽量减少重复代码的编写,复用已有的代码。
  7. 可测试性(testability):代码可测试性的好坏,能从侧面上非常准确地反应代码质量的好坏。

其中,可维护性、可读性、可扩展性又是提到最多的、最重要的三个评价标准。

# 如何才能写出高质量的代码?

  • 面向对象中的继承、多态能让我们写出可复用的代码;
  • 编码规范能让我们写出可读性好的代码;
  • 设计原则中的单一职责、DRY、基于接口而非实现、里式替换原则等,可以让我们写出可复用、灵活、可读性好、易扩展、易维护的代码;
  • 设计模式可以让我们写出易扩展的代码;
  • 持续重构可以时刻保持代码的可维护性;

# 面向对象

主流的编程范式或者是编程风格有三种:

  1. 面向过程
  2. 面向对象
  3. 函数式编程

面向对象 7 个大的知识点:

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

# 设计原则

常用的设计原则:

  • SOLID 原则 - SRP 单一职责原则
  • SOLID 原则 - OCP 开闭原则
  • SOLID 原则 - LSP 里式替换原则
  • SOLID 原则 - ISP 接口隔离原则
  • SOLID 原则 - DIP 依赖倒置原则
  • DRY 原则、KISS 原则、YAGNI 原则、LOD 法则

# 设计模式

设计模式是针对软件开发中经常遇到的一些设计问题,总结出来的一套解决方案或者设计思路。大部分设计模式要解决的都是代码的可扩展性问题。

经典的设计模式有 23 种。随着编程语言的演进,一些设计模式(比如 Singleton )也随之过时,甚至成了反模式,一些则被内置在编程语言中(比如 Iterator ),另外还有一些新的模式诞生(比如 Monostate )。

# 创建型

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

不常用:原型模式。

# 结构型

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

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

# 行为型

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

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

# 编程规范

编程规范主要解决的是代码的可读性问题。

如何给变量、类、函数命名,如何写代码注释,函数不宜过长、参数不能过多

# 代码重构

持续重构是保持代码质量不下降的有效手段,能有效避免代码腐化到无可救药的地步。

重构的工具:面向对象设计思想、设计原则、设计模式、编码规范。

在开发初期,除非特别必须,我们一定不要过度设计,应用复杂的设计模式。而是当代码出现问题的时候,我们再针对问题,应用原则和模式进行重构。这样就能有效避免前期的过度设计。

重构知识点:

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

# 面向对象、设计原则、设计模式、编程规范和代码重构,这五者的关系

  • 面向对象编程因为其具有丰富的特性(封装、抽象、继承、多态),可以实现很多复杂的设计思路,是很多设计原则、设计模式等编码实现的基础。
  • 设计原则是指导我们代码设计的一些经验总结,对于某些场景下,是否应该应用某种设计模式,具有指导意义。比如,“开闭原则” 是很多设计模式(策略、模板等)的指导原则。
  • 设计模式是针对软件开发中经常遇到的一些设计问题,总结出来的一套解决方案或者设计思路。应用设计模式的主要目的是提高代码的可扩展性。从抽象程度上来讲,设计原则比设计模式更抽象。设计模式更加具体、更加可执行。
  • 编程规范主要解决的是代码的可读性问题。编码规范相对于设计原则、设计模式,更加具体、更加偏重代码细节、更加能落地。持续的小重构依赖的理论基础主要就是编程规范。
  • 重构作为保持代码质量不下降的有效手段,利用的就是面向对象、设计原则、设计模式、编码规范这些理论。

img

上次更新: 2024/03/11, 22:37:05
读薄《设计模式之美》-理论

读薄《设计模式之美》-理论→

最近更新
01
Docker Swarm
04-18
02
安全隧道 - gost
04-17
03
Solana最佳实践
04-16
更多文章>
Theme by Vdoing | Copyright © 2018-2025 NipGeihou | 友情链接
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式