设计模式学习笔记 - 学前简述

1.为什么学习设计模式?

学习设计模式的原因:

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

设计模式作为一门与编码、开发有着直接关系的基础知识,是你现在就要开始学习的。早点学习,以后的项目就都可以拿来锻炼,每写一行代码都是对内功的利用和加深,是可以收益整个事业生涯的一个技能。

2.如何写出高质量代码,如何评价代码质量的好坏?

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

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

2.2 常量的评价标准有哪几个?

一般,常用到的几个评价代码质量的标准是:

  • 可维护性
  • 可读性
  • 可扩展性
  • 灵活性
  • 简洁性
  • 可复用性
  • 可测试性。

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

2.3 如何写出高质量的代码?

要写出高质量的代码,我们就要掌握一些更加细化、更加能落地的编程方法论,这就包含面向对象设计思想、设计原则、设计模式、编码规范、重构技巧等,这就是后面学习的重点。

3.面向对象、设计原则、设计模式、编码规范、重构的关系

面向对象

目前主流的编程风格有三种,分别是面向过程、面向对象和函数式编程。面向对象这种编程风格又是其中最主流的。

关于面向对象,你需要掌握下面这 7 大知识点:

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

设计原则

设计原则是知道我们代码设计的一些经验总结。有如下几种常用的设计原则:

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

设计模式

设计模式是针对软件开发中经常遇到的一些涉及问题,总结出来的一套解决方案或设计思想。设计模式的学习难点是了解他们都能解决哪些问题,掌握典型的应用常见,并懂得不过度应用。

设计模式一共有 23 种,可分为三大类:创建型、结构性和行为型。对于这 23 种设计模式的学习,我们要有侧重点,因为有些模式比较常用,有些模式是很少被用到。对于常用的设计模式,我们要多花时间掌握;对于不常用的设计模式,只需要稍微了解即可。

1. 创建型

常用的有:

  • 单例模式
  • 工厂模式(工厂方法和抽象工厂)
  • 建造者模式

不常用的有:

  • 原型模式

2. 结构型

常用的有:

  • 代理模式
  • 桥接模式
  • 装饰者模式
  • 适配器模式

不常用的有:

  • 门面模式
  • 组合模式
  • 享元模式

3.行为型

常用的有:

  • 观察者模式
  • 模板模式
  • 策略模式
  • 职责链模式
  • 迭代器模式
  • 状态模式

不常用的有:

  • 访问者模式
  • 备忘录模式
  • 命令模式
  • 解释器模式
  • 中介模式

编程规范

编程规范主要解决代码的可读性问题。编程规范相对于设计原则、设计模式,更加具体、更加侧重代码细节。即使,你对设计原则不熟悉、对设计模式不了解,但你最起码要掌握基本的编码规范,比如给变量、类、函数命名、如何写代码注释、函数不宜过长、参数不能过多等等。

对于编码规范,有很多书籍以及讲得很好了(比如《重构》《代码大全》《代码整洁之道》等)。而且,每条编码规范都非常简单、非常明确,比较偏向记忆,只需要照着来就可以了。

持续地小重构依赖的理论基础主要就是编程规范。

除了编码规范,后面还会介绍一些代码的坏味道,让你知道什么样的代码是不符合规范的,应如何优化。

参照编码规范,可以写出可读性好的代码;参照代码的坏味道,你可以找出代码存在的可读性问题。

代码重构

在软件开发中,只要软件在不停地迭代,就没有一劳永逸的设计。随着需求的变化,代码的不停堆砌,原有的设计必定会存在这样那样的问题。针对这些问题,我们就需要进行代码重构。重构是软件开发过程中非常重要的环节,持续重构是保持代码质量不下降的有效手段,能有效避免代码腐化到无可救药的地步。

而重构就是根据前面提到的面向对象设计思想、设计原则、设计模式、编码规范,来进行的。实际上,设计思想、设计原则、设计模式一个最重要的应用常见就是在重构的时候。

虽然设计模式可以提高代码的可扩展性,但过度不恰当的使用,也会增加代码的复杂度,影响代码的可读性。在开发初期,除非必须,我们一定不要过度设计,应用复杂的设计模式。而是当代码出现问题的时候,我们再针对问题,应用原则和模式进行重构。这样就能有效避免前期的过度设计。

对于重构,你需要掌握以下几个知识点:

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

五者之间的联系

关于面向对象、设计原则、设计模式、编程规范和重构,这五者的关系,我们梳理下:

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

实际上,面向对象、设计原则、设计模式、编程规范、代码重构,这五者都是保持或提高代码质量的方法,本质上都是服务于编写高质量代码这一件事的。

你可能感兴趣的:(设计模式-实战,设计模式)