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

2024-02-19 09:36

本文主要是介绍设计模式学习笔记 - 学前简述,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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)。
  • 保证重构不出错的技术手段:单元测试和代码的可测试性。
  • 两种不同规模的重构:大重构(大规模高层次)和小重构(小规模、低层次)。

五者之间的联系

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

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

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

这篇关于设计模式学习笔记 - 学前简述的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/724272

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

在JS中的设计模式的单例模式、策略模式、代理模式、原型模式浅讲

1. 单例模式(Singleton Pattern) 确保一个类只有一个实例,并提供一个全局访问点。 示例代码: class Singleton {constructor() {if (Singleton.instance) {return Singleton.instance;}Singleton.instance = this;this.data = [];}addData(value)

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识

线性代数|机器学习-P36在图中找聚类

文章目录 1. 常见图结构2. 谱聚类 感觉后面几节课的内容跨越太大,需要补充太多的知识点,教授讲得内容跨越较大,一般一节课的内容是书本上的一章节内容,所以看视频比较吃力,需要先预习课本内容后才能够很好的理解教授讲解的知识点。 1. 常见图结构 假设我们有如下图结构: Adjacency Matrix:行和列表示的是节点的位置,A[i,j]表示的第 i 个节点和第 j 个