设计模式之总述

2021-04-13 10:40:41 浏览数 (1)

A1 为什么学设计模式

  1. 潜移默化提升对技术的理解
  2. 写出高效、可扩展、可读、可维护的高质量代码
  3. 应对面试
  4. 提高复杂代码设计和开发能力
  5. 读源码和学框架事半功倍

A2 何为高质量代码

最常见的标准:

  • 可维护性(maintainabilty)
代码语言:txt复制
- 在不破坏原有代码设计、不引入新的Bug的情况下,能够快速地修改或者添加代码。
- 具体:代码分层清晰、模块化好、高内聚低耦合、遵从基于接口而非实现编程的设计原则等。可读性(readability)
代码语言:txt复制
- 符合编码规范、命名达意、注释详尽、函数长短合适、模块划分清晰、符合高内聚低耦合。可扩展性(extensibility)
代码语言:txt复制
- 代码预留了一些功能扩展点,可把新功能代码,直接插到扩展点上,而不需要为添加一个功能而大动干戈,改动大量原始代码。灵活性(flexibility)
代码语言:txt复制
- 易扩展,易复用,易用简洁性(simplicirty)
代码语言:txt复制
- KISS原则:Keep It Simple, Stupid。
- 尽量保持代码简单、逻辑清晰:易读、易维护。
- 思从深而行从简,真正高手能云淡风轻地用最简单的方法解决最复杂的问题。可复用性(reusability)
代码语言:txt复制
- 尽量减少重复代码的编写,复用已有的代码。
- 联系DRY(Don`t Repeat Yourself)设计原则。可测试性(testability)
代码语言:txt复制
- 从侧面展现代码是否高质量

A3 面向对象 设计原则 设计模式 编程规范 重构

3.1 面向对象

目前主流编程范式/风格:

  • 面向过程
  • 面向对象(最主流)
  • 函数式编程

重点:

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

3.2 设计原则

指导我们代码设计的一些经验总结。

常用设计原则:

  1. SOLOD 原则
    • SRP 单一职责原则
    • OCP 开闭原则
    • LSP 里氏替换原则
    • ISP 接口隔离原则
    • DIP 依赖倒置原则
  2. DRY 原则
  3. KISS 原则
  4. YAGNI 原则
  5. LOD 原则

3.3 设计模式

针对软件开发中经常遇到的一些设计问题,总结出来的一套解决方案或者设计思路。

大部分设计模式都是解决代码的可扩展性。

经典设计模式23种。

主要分类:

  1. 创建型
代码语言:txt复制
- 常用:单例模式、工厂模式(工厂方法和抽象工厂)、建造者模式
- 不常用:原型模式结构型
代码语言:txt复制
- 常用:代理模式、桥接模式、装饰者模式、适配器模式
- 不常用:门面模式、组合模式、享元模式行为型
代码语言:txt复制
- 常用:观察者模式、模板模式、策略模式、职责链模式、迭代器模式、状态模式
- 不常用:访问者模式、备忘录模式、命令模式、解释器模式、中介模式

3.4 编程规范

主要解决代码的可读性问题。

起码掌握基本的编码规范。

3.5 代码重构

因软件是不停迭代的,故代码需不停堆砌,原设计会存在一些问题,解决办法就是代码重构。

持续重构是保持代码质量不下降的有效手段。

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

知识点:

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

3.6 五者关系

  1. 基础:面向对象
  2. 指导:设计原则
  3. 思路:设计模式
  4. 可读:编程规范
  5. 持续:重构

目的:保持或提高代码质量

串起来:

  • 面向对象的丰富特性,可实现多种复杂设计思路,为设计原则和设计模式等编码实现提供基础
  • 设计原则指导我们设计代码和代码模式的经验和总结。
  • 设计模式是总结的针对问题的解决方案和设计思路,提高代码可扩展性。
  • 编程规范解决代码可读性,持续的小重构依赖的理论基础主要就是编程规范。
  • 重构可使代码持续化,保持代码活力和质量。通过前四种理论实现。

A4 相关

下集:面向对象之总述

参考文献

极客时间:设计模式之美.王争。

0 人点赞