导读:如何学好设计模式_设计模式课程怎么学-程序员宅基地

技术标签: 编程语言  经典设计模式实战演练  设计模式  

什么是设计模式

设计模式(Design Pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的

上面的解释来自于某度某科,是比较标准的定义,可以从中筛选出几个关键字来帮助我们理解什么是设计模式:

  • 最佳实践
  • 解决方案
  • 试验和错误总结

从上面的三个关键词中可以总结出,设计模式就是在针对编码过程中遇到的问题总结出来的最佳解决方案。

那么这些问题指的是什么问题呢?

面向对象的程序应该具有可维护性、代码可复用性、扩展性及灵活性,要解决的问题就是代码可维护性问题、复用性问题、扩展性问题、灵活性问题。

简单来说,设计模式就是指导你如何写出可维护、可复用、可扩展及灵活的代码。

设计模式分类

设计模式总共有23种,总体来说可以分为三大类:创建型模式(Creational Patterns)、结构型模式(Structural Patterns)和行为型模式(Behavioral Patterns)

分类 关注点 包含
创建型模式 关注于对象的创建,同时隐藏创建逻辑 工厂模式
抽象工厂模式
单例模式
建造者模式
原型模式
结构型模式 关注类和对象之间的组合 适配器模式
过滤器模式
装饰模式
享元模式
代理模式
外观模式
组合模式
桥接模式
行为型模式 关注对象之间的通信 责任链模式
命令模式
中介者模式
观察者模式
状态模式
策略模式
模板模式
空对象模式
备忘录模式
迭代器模式
解释器模式
访问者模式

上面的三种分类,有助于在开发时思考当前场景应该使用哪种分类。

大家不一定要全部记住,有个大概的了解即可。

学习设计模式

为什么要学设计模式

写出可维护、可复用、可扩展及灵活的代码是我们的目的,也是学习设计模式的理由,但是这个理由对我们来说太抽象,下面从“读”和“写”两方面来说明到底为什么要学习设计模式。

作为开发人员,不可避免的要接触其他人写的代码,有的是一些知名的库或框架,例如 Spring、Shiro 等。

但是当我们去阅读这些框架源码的时候会发现无从下手,因为类太多了,关系太复杂,而且很多类的命名看不懂,比如 xxxBuilder、xxxStrategy、xxxFilter 等,一个词看不懂就可能导致你直接放弃继续阅读。

如果没有学过设计模式,自然看不懂,学习设计模式可以有效的帮助你阅读代码,即便不能百分百帮到你,至少也能帮到百分之三四十。

每一个开发人员必然喷过其他人写的代码,觉得其他人的代码写的很垃圾,尤其是要扩展功能或者修改功能的时候,恨不得全部删掉重新再写,其实在其他人看来你的代码也是如此。所以写出一手让人无话可说的代码是很有必要的,不仅可以满足你的小小成就感,也可以让你的程序更快速稳定的发展。

在一个项目组中,如果大家都学习过设计模式,那么当你阅读或修改同事写的代码时也将得心应手,少了很多麻烦。

如何学好设计模式

现如今网上和书上都有大量的设计模式的教程,但是他们大部分都有一个共同点:仅仅使用生活中的例子。

比如前几年我第一次学习设计模式,在学到适配器模式时,教程中抛出了一个电器的插头问题:

你家插座只有三头的,但电器插头是两头的,咋办?弄个插头适配器将两头转换成三头。

nice,这个例子简单明了,作为新手的我瞬间明白了适配器的含义,就是在不兼容的双方中间做一层转化。

但是后来发现在实际编码中根本用不上这个设计模式,因为我根本不会用。

生活中的例子的确可以帮助我们理解设计模式,这是毋庸置疑的,但是想要真正用好设计模式,实际项目中的案例是必不可少的,这也是我写这门课的原因,希望通过分析实际案例,能够帮到更多想要学习设计模式的同行。

下面给出几点更加具体的建议:

  • 从生活例子中去理解设计模式;
  • 从实际案例去了解设计模式的使用场景;
  • 动手实践,在学完实际案例之后,不妨动手写一写,不要写生活中的例子,自己构造一个小功能,用上你的设计模式;
  • 改变自己的意识,在开发或修改一个功能时,首先要下意识地去思考这个功能将来在修改和扩展上会遇到什么问题,能否使用上设计模式。记住一定要思考、一定要思考、一定要思考,即便最终用不上,也能让你回顾一遍设计模式的内容,使其知识更牢固。很多开发者不是不会用,而是根本没有想过要用设计模式,久而久之这方面的能力自然就弱化了。

课程说明

课程内容

本课程每一篇文章主要包含三大部分:

  • 解释和理解设计模式;
  • 至少介绍一个实际案例(实际案例有些是我自己写的,有些来自于已有的框架或库);
  • 设计模式优缺点。
必要准备

本课程将使用 Java 语言讲解设计模式,虽然设计模式与语言本身无关,但是本课程中有许多实际案例都是来自于知名的 Java 框架源码,如果没有 Java 基础,学习效果可能不佳。

除了要求 Java 基础之外,还需要了解 UML 图,如果不了解 UML,只需要知道以下几种 UML 关系即可:

  • 泛化:可以简单的理解为继承关系;
  • 实现:一般是接口和实现类之间的关系;
  • 关联:一种拥有关系,比如老师类中有学生列表,那么老师类和学生类就是拥有关系;
  • 聚合:整体与部分的关系,但是整体和部分是可以分离而独立存在的,如汽车类和轮胎类;
  • 组合:整体与部分的关系,但是二者不可分离,分离了就没有意义了,例如,公司类和部门类,没有公司就没有部门;
  • 依赖:一种使用关系,例如创建 A 类必须要有 B 类。

参考下图:

enter image description here

记不住也没关系,后续课程主要使用泛化和实现这两种,先记住这两种即可,如果有遇到看不懂的再回头来看一眼。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/u010837612/article/details/108729326

智能推荐

【CTF】用python PIL将RGB值转化为图片_ctf 三个坐标值转换图像-程序员宅基地

文章浏览阅读1.5w次,点赞4次,收藏28次。一道关于ctf的题,用python将rgb值转化为图片_ctf 三个坐标值转换图像

海思HI35xx平台软件开发快速入门之背景知识-程序员宅基地

文章浏览阅读1.4k次。前言: 安防领域最近几年可谓暗流涌动,作为安防业的双寡头,大华股份与海康威视凭借行业的东风,两家公司的成长速度异常强劲,在国际市场上已经和应用厂家进行厮杀。 2015年两家公司双双晋升“全球安放50强”,海康排名第二,大华排名第五。以华为海思为代表国产芯片解决方案不断走强,在国际竞争中优势凸显,在后端NVR高端产品线先后推出了海思3531、海思3535、海思3536,同时针对低端的产品线也不..._海思hi35xx平台软件开发快速入门之背景知识

计算机组成原理复习资料_一个地址只能对应输入输出设备-程序员宅基地

文章浏览阅读2.6k次,点赞3次,收藏27次。复习资料一、单项选择题1 CRT的颜色数为真彩色,则它的颜色位是_________。A、24位 B、8位 C、16位 D、32位 答案:A2 一个节拍脉冲持续的时间长短是_________。A、指令周期 B、机器周期 C、时钟周期 D、以上都不是 答案:C3 CPU组成中不包括_________。A、指令寄存器 B、地址寄存器 C、指令译码器 D、地..._一个地址只能对应输入输出设备

值得收藏【Markdown】皇额娘级教你玩转vscode插件: Markdown All in One_vscode markdown all in one-程序员宅基地

文章浏览阅读2.5k次,点赞2次,收藏2次。vscode中的Markdown All in One插件目前下载量:6,103,710,实力水平轻而易举的可以看出来了,相比于大名鼎鼎的Typora最大的良心优势就是free!free!free!对于穷苦人来说是极好的,赞~~~截至目前最新版本:v3.5.1。_vscode markdown all in one

Linux 命令-程序员宅基地

文章浏览阅读840次,点赞17次,收藏18次。linux命令及网络配置

CC2530定时器1使能_t1cctl0-程序员宅基地

文章浏览阅读5.8k次,点赞4次,收藏19次。CC2530定时器1CC2530有5个定时器(定时器1,定时器2,定时器3,定时器4,睡眠定时器),定时器1是一个16位定时器,具有一个可编程的分频器,一个16位周期值,和五个各自可编程的计数器/捕获通道,每个都有一个16位比较值。..._t1cctl0

随便推点

SEO优化与SEM(竞价)区别在哪?_认识seo优化与sem营销-程序员宅基地

文章浏览阅读2.2k次。时代一直在进步,互联网公司也是逐渐增多,那么企业网站要想快速的获取网站排名又该如何选择呢?今天重庆SEO鹏鹏就详细的讲一讲SEO优化与SEM实质区别。一、SEO优化优势所在通过搜索引擎SEO技术获取一个较好的网站关键词排名,对于掌握了SEO技术的人来说,实施网站优化基本上可以不需要投入资金就可以开始进行操作,与付费推广比较起来,SEO的成本是非常低的,而且管理起来也是非常方便的只要优化..._认识seo优化与sem营销

基于R语言、MATLAB、Python机器学习方法与案例分析_r语言对hmdb51视频分类-程序员宅基地

文章浏览阅读3.5k次,点赞3次,收藏24次。机器学习已经成为继理论、实验和数值计算之后的科研“第四范式”,是发现新规律,总结和分析实验结果的利器。_r语言对hmdb51视频分类

Severless SQL on OSS 实验-程序员宅基地

文章浏览阅读97次。基于OSS的数据查询分析和BI报表数据存储在OSS后,有多种查询分析的方法,包括阿里云MaxCompute、DataLakeAnalytics产品等Severless查询分析服务,也可以自建Spark、Presto、Imapla应用来分析OSS上的数据。实验步骤(DataLakeAnalytics on OSS)本次实验,主要介绍,如何使用OSS+..._sql on oss

ESP32移植LVGL并将LVGL外部输入设备设置为物理按键_lvgl adc-button-程序员宅基地

文章浏览阅读3.1k次。前情提示:在上篇博文中,我将一个使用GUI-Guider生成的图形界面移植到了ESP32设备上。显示成功,详情参见:如何将使用GUI-Guider生成的LVGL移植到ESP32https://blog.csdn.net/QTRPio/article/details/124120432背景:但是我使用GUI-Guider生成的图形界面还包含了几个图片按键: 条码识别; 手势识别;..._lvgl adc-button

BLE协议架构概述(1)_ble 协议-程序员宅基地

文章浏览阅读1.3w次,点赞2次,收藏12次。BLE 协议架构总体上分成3块,从下到上分别是:控制器(Controller),主机(Host) 和应用端(Apps);3者可以在同一芯片类实现,也可以分不同芯片内实现,控制器(Controller)是处理射频数据解析,接收和发送,主机(Host)是控制不同设备之间如何进行数据交换;应用端(Apps)实现具体应用。控制器ControllerController实现射频相关的模拟和数_ble 协议

围观了张一鸣近10年的微博,我整理了这231条干货_张一鸣微博干货-程序员宅基地

文章浏览阅读3.7k次,点赞73次,收藏284次。本文转载自 仟语仟寻,作者 霍仟这几天抽空把张一鸣的所有微博看了一遍,发现2010年的微博最好,就是他30岁左右的时候,那时候刚创业没多久,在微博上认真分享自己的思考和观点。到了2012年附近,开始做今日头条,每天都是大量转发今日头条上的文章到微博,干货变少了。后面就更新得越来越少。我从他的微博中,试图找到他成功的钥匙,得到了一些只言片语,但是仅仅是这些只言片语,我都觉得对我的启发很大。他从南开大学毕业,妻子是大学同学,毕业后去过微软,后来从微软离职,然后去过饭否,应该跟过王兴王慧文一阵子,后来_张一鸣微博干货