简单明了的设计模式-立意篇

1.岁月的沉淀

我们为什么要学设计模式?

如果是在我刚成为程序员的时候,我大概会这么回答:

因为设计模式是前人经验的总结,可以用来解决特定环境下,重复出现的特定问题。

同时也是程序员进阶的必备知识

上面的说法当然没有错,但是如果让现在的我来回答,我会加上这几句:

因为设计模式不会过时。

是的,在工作多年以后,看见各种技术如大浪淘沙一般从兴起到衰落,看见主流技术栈两三年就换血一次,我不禁陷入了深深的担心:如果我学不动了怎么办?

特别是在年龄渐长之后,虽然大多数技术都有相通之处,想要快速掌握并不难。可是细微之处却也有不少坑,真用起来,踩坑肯定也是少不了的。

所以渐渐的,我开始寻找那些不变的东西,寻找在这些让人眼花缭乱的技术背后,在漫长岁月中真正能沉淀下来的东西。

不错,我想你已经猜到了,就是那些老生常谈的东西,大学时老师曾经无数次在我耳边强调的东西:

数据结构、算法、设计模式……

最质朴的东西往往最珍贵,古人诚不欺我,哈哈。

作为一名普通的码农,数据结构和算法平时接触不多,真正用的多的,还是设计模式。

  • 设计一个功能模块要用到设计模式,否则根本没法维护
  • 扒开源项目的源码要懂设计模式,否则有可能看不懂
  • 代码review也会用到,虽然不直接用模式,但是会用到原则

所以,对我而言,设计模式已经成为挡在身前的一座山,要么跨过去,要么永远止步于此。

所以有了简明设计模式的写作计划,愿我们都能征服这座大山,最后同立山巅,看日升日落,云卷云舒。

2.设计模式的分类

设计模式一共23个。

其实设计模式之间也有很多共性和差异,为了方便理解和记忆,一般来说会分为三类:

  • 创建型模式:抽象了对象实例化过程,用来帮助创建对象的实例
  • 结构型模式:描述如何组合类和对象以获得更大的结构
  • 行为型模式:描述算法和对象间职责的分配

具体情况如下图:

简单明了的设计模式-立意篇

3.磨一下刀

所谓磨刀不误砍柴工,在学习设计模式之前,我们还需要掌握两种武器:设计原则和UML类图

学习UML类图,是为了能够更好的理解设计模式的结构

学习设计原则,则是为了知道设计模式为什么要这么设计

这个就放到下次说吧。

本文由博客一文多发平台 OpenWrite 发布!

Original: https://www.cnblogs.com/bailiyi/p/13663673.html
Author: 百里弈
Title: 简单明了的设计模式-立意篇

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/685546/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Windows下的SSH Server

    (请注意,本文内容以杂谈为主,稍微提及了一些在MobaXterm中开启SSH Server可能遇到的情况和解决方法,没有多少干货,请酌情查看,谢谢) 最近比较无聊,使用MobaXt…

    技术杂谈 2023年6月21日
    0111
  • Spring基于注解的AOP的切面优先级

    每一个切面都有一个默认的优先级(默认值为Integer的最大值) @Order(1)通过这个注解设置一个正整数数值,数值越小,优先级越高 @Component @Aspect//&…

    技术杂谈 2023年7月11日
    099
  • 初等数论学习笔记 III:数论函数与筛法

    初等数论学习笔记 I:同余相关。 初等数论学习笔记 II:分解质因数。 1. 数论函数 本篇笔记所有内容均与数论函数相关。因此充分了解各种数论函数的名称,定义,符号和性质是必要的。…

    技术杂谈 2023年6月21日
    0124
  • 「周记」拓扑排序

    拓扑排序的英文名是 Topological sorting。拓扑排序要解决的问题是给一个图的所有节点排序。拓扑排序的目标是将所有节点排序,使得排在前面的节点不能依赖于排在后面的节点…

    技术杂谈 2023年7月24日
    069
  • K8S中NodePort端口范围修改

    修改所有Master节点的kube-apiserver服务启动文件里的–service-node-port-range参数; bash;gutter:true; [ro…

    技术杂谈 2023年5月30日
    095
  • 学习链表复盘中

    链表基础知识 链表的分类 链表是一种通过指针串联在一起的线性结构,主要分为单链表、双向链表和循环链表。 单链表 单链表中每一个节点是由两部分组成,一个是数据域、一个是指针域(存放指…

    技术杂谈 2023年7月25日
    0107
  • 《Silverlight 2完美征程》:书稿目录

    内容简介 本书详细介绍了微软下一代富互联网开发技术Silverlight,分为基础篇、进阶篇、高级篇和案例篇四个部分,共22个章节,以Silverlight 2为主要版本从不同的层…

    技术杂谈 2023年5月30日
    082
  • 技术管理进阶——团队一盘散沙,怎么破?

    原创不易,求分享、求一键三连 最近有个粉丝问了一道 大题: 小钗,我最近空降到一个小公司做技术负责人,感觉团队士气很低,同学们要么有力无处使,要么常规摸鱼,这种一盘散沙的团队该如何…

    技术杂谈 2023年6月1日
    094
  • Hadoop(四)C#操作Hbase

    Hbase Hbase是一种NoSql模式的数据库,采用了 列式存储。而采用了列存储天然具备以下优势: 可只查涉及的列,且列可作为索引,相对高效 针对某一列的聚合及其方便 同一列的…

    技术杂谈 2023年7月24日
    081
  • 数据结构与算法工具类自用(不定时更新)

    目前针对基础的整数排序问题和数组较为实用。 public class AlgoUtils { /** * 对数器, 返回int数组 * @param maxLen 数组长度范围[0…

    技术杂谈 2023年7月23日
    085
  • Vue系列—源码调试(二)

    我们要对Vue源码进行分析,首先我们需要能够对vue源码进行调式(这里的源码调式是ES6版本的,不是打包后的代码),因此首先我们要去官方github上克隆一份vue项目下来,如下具…

    技术杂谈 2023年6月1日
    077
  • hutool包里的ObjectUtil.isNull和ObjectUtil.isEmpty的区别

    大家都用过 hutool包把,包路径为: cn.hutool.core.util,最近再使用的过程中一直没高明白ObjectUtil.isEmpty和ObjectUtil.isNu…

    技术杂谈 2023年7月24日
    084
  • 2.Add Two Numbers——LeetCode

    You are given two non-empty linked lists representing two non-negative integers. The digit…

    技术杂谈 2023年6月21日
    077
  • 【Golang】golang实现sha256加密函数

    golang实现sha256加密函数 //Sha256加密 func Sha256(src string) string { m := sha256.New() m.Write([…

    技术杂谈 2023年6月1日
    095
  • 汇编语言学习记录一

    0x00——什么是汇编语言? 汇编语言:早期实现程序员和机器进行交互的汇编指令集。 汇编指令,通过编译器,转换成机器码,从而使 机器 理解其指令。 0x01——汇编语言的组成 汇编…

    技术杂谈 2023年6月21日
    0102
  • mui 文件附件下载

    class="ui-page-login"> "utf-8"> "viewport" content=&qu…

    技术杂谈 2023年5月31日
    0103
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球