【设计模式】一、设计模式概述

文章目录

    • 一、设计模式概述
      • (一)设计模式是什么
        • 1. 设计模式的定义
        • 2. 设计模式的组成要素
        • 3、常用设计模式一览表
      • (二)设计模式的优点(用途)
      • ※ 本文小结


一、设计模式概述

(一)设计模式是什么

1. 设计模式的定义

设计模式的一般定义如下:

设计模式(Design Pattern) 是一套被反复使用的、多数人知晓的、经过分类编目的代码设计经验的总结,使用设计模式是为了可以重用代码,让代码更让容易被他人理解并且提高代码的可靠性。

狭义的设计模式 是指 GoF 在 Design Patterns: Elements of Reusable Object-Oriented Software(《设计模式:可复用面向对象软件的基础》)一书中所介绍的23种经典设计模式。

2. 设计模式的组成要素

设计模式一般包括模式名称、问题、目的、解决方案、效果等组成要素,其中关键要素是模式名称、问题、解决方案和效果。

  • 模式名称(Pattern Name): 通过一两个词来为模式命名,以便我们更好地理解模式并方便开发人员之间的交流,绝大多数模式都是根据其功能或模式结构来命名的(GoF设计模式中没有一个模式用人名命名)。
  • 问题(Problem): 描述了应该在何时使用模式,它包含了设计中存在的问题以及问题存在的原因。
  • 解决方案(Solution): 描述了一个设计模式的组成部分,以及这些组成部分之间的相互关系、各自的职责和协作方式,通常解决方案通过UML类图和核心代码进行描述。
  • 效果(Consequence): 描述了模式的优缺点以及在使用模式时应权衡的问题。
3、常用设计模式一览表
类型模式名称学习难度使用频率
(一)创建型模式(5种)单例模式★☆☆☆☆★★★★☆
简单工厂模式(备注:不在GoF 23种设计模式中)★★☆☆☆★★★☆☆
工厂模式★★☆☆☆★★★★★
抽象工厂模式★★★★☆★★★★★
原型模式★★★☆☆★★★☆☆
建造者模式★★★★☆★★☆☆☆
(二)结构型模式(7种)适配器模式★★☆☆☆★★★★☆
桥接模式★★★☆☆★★★☆☆
组合模式★★★☆☆★★★★☆
装饰模式★★★☆☆★★★☆☆
外观模式★☆☆☆☆★★★★★
享元模式★★★★☆★☆☆☆☆
代理模式★★★☆☆★★★★☆
(三)行为型模式(11种)职责链模式★★★☆☆★★☆☆☆
命令模式★★★☆☆★★★★☆
解释器模式★★★★☆★☆☆☆☆
迭代器模式★★★☆☆★★★★★
中介者模式★★★☆☆★★☆☆☆
备忘录模式★★☆☆☆★★☆☆☆
观察者模式★★★☆☆★★★★★
状态模式★★★☆☆★★★☆☆
策略模式★☆☆☆☆★★★★☆
模板模式★★☆☆☆★★★☆☆
访问者模式★★★★☆★☆☆☆☆

(二)设计模式的优点(用途)

  • 提供了一种共享的设计词汇和概念,使开发人员能够更好地沟通和理解彼此的设计意图。
  • 提供了经过验证的解决方案,可以提高软件的可维护性、可复用性和灵活性。
  • 促进了代码的重用,避免了重复的设计和实现。
  • 通过遵循设计模式,可以减少系统中的错误和问题,提高代码质量。

※ 本文小结

在这里插入图片描述


参考资料

参考书籍:《设计模式的艺术 / 刘伟著》

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/277047.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

复杂网络——半局部中心法

一、概述 由于最近写论文需要使用复杂网络知识中的半局部中心法,但是截止目前来说,网上几乎搜索不到有关的MATLAB程序代码,只有一篇用Python编写的程序,我的电脑中没有python,所以我花费一些时间,利用matla…

基于SpringBoot+Vue交流和分享平台的设计与实现(源码+部署说明+演示视频+源码介绍)

您好,我是码农飞哥(wei158556),感谢您阅读本文,欢迎一键三连哦。💪🏻 1. Python基础专栏,基础知识一网打尽,9.9元买不了吃亏,买不了上当。 Python从入门到精通…

Day44-sersync企业实时复制实战

Day44-sersync企业实时复制实战 1. sersync实时复制工具介绍1.1 sersync工具简介1.2 sersync特点1.3 sersync图解原理1.4 sersyncrsync实时复制方案项目实践1.4.1 图解项目方案架构及实现原理1.4.2 确保远程数据传输服务部署完成1.4.3 检查当前系统nfs01是否支持inotify实时监控…

008:安装Docker

安装Docker 如果不太熟悉Linux命令,不想学习Linux命令,可以直接看文末NAS面板章节,通过面板,像使用Window一样操作NAS。 一、安装 Docker 1.安装 Docker wget -qO- https://get.docker.com/ | sh2.启动 Docker 服务 sudo sys…

qt vs 编程 字符编码 程序从源码到编译到显示过程中存在的字符编码及隐藏的字符编码转换

理解字符编码,请参考:unicode ucs2 utf16 utf8 ansi GBK GB2312 CSDN博客 了解windows字符显示必须了解locale概念 参考:揭密 Windows 上的各种 locale - 知乎 汉字(或者说多字节字符)的存放需求,是计算…

K8S CNI

OCI概念 OCI,Open Container Initiative,开放容器标准,是一个轻量级,开放的治理结构(项目),在 Linux 基金会的支持下成立,致力于围绕容器格式和运行时创建开放的行业标准。 OCI 项目…

AI智慧校园电子班牌云平台源码

目录 家长端 学校端 电子围栏 亲情通话 课堂答题 移动化管理模式 统一资源管理平台 模板内容智能更换 家校互联 家长端 多场景通话:上学放学联系、紧急遇险求助联系、日常亲情通话关注孩子人身安全:到校离校情况、进入危险区域预警等。 学校端 课堂秩序管理:提高教…

深入浅出:Objective-C中使用MWFeedParser下载豆瓣RSS

摘要 本文旨在介绍如何在Objective-C中使用MWFeedParser库下载豆瓣RSS内容,同时展示如何通过爬虫代理IP技术和多线程提高爬虫的效率和安全性。 背景 随着信息量的激增,爬虫技术成为了获取和处理大量网络数据的重要手段。Objective-C作为一种成熟的编程…

3D地图在BI大屏中的应用实践

前言 随着商业智能的不断发展,数据可视化已成为一项重要工具,有助于用户更好地理解数据和分析结果。其中,3D地图作为一种可视化工具,已经在BI大屏中得到了广泛地应用。 3D地图通过将地理信息与数据相结合,以更加直观…

工具-百度云盘服务-身份认证

目标 通过百度网盘API的方式去获取网盘中的文件,要实现这的第一步就是需要获取网盘的权限。资料(参考) 如果期望应用访问用户的网盘文件,则需要经过用户同意,这个流程被称为“授权”。百度网盘开放平台基于 OAuth2.0 接入授权。OAuth2.0 是…

嵌入式学习第二十七天!(TCP并发模型)

TCP并发模型: 1. TCP多线程模型: 缺点:创建线程会带来资源开销,能够实现的并发量比较有限。 2. IO模型: 1. 阻塞IO: 没有数据到来时,可以让任务挂起,节省CPU资源开销,提…

物理隔离条件下,如何安全高效地进行内外网文件导入导出?

内外网文件导入导出通常指的是在内部网络(内网)和外部网络(外网)之间传输文件的过程。这在企业环境中尤其常见,因为内部网络通常包含敏感数据,而外部网络(如互联网)则允许更广泛的访…

Apache zookeeper kafka 开启SASL安全认证

背景:我之前安装的kafka没有开启安全鉴权,在没有任何凭证的情况下都可以访问kafka。搜了一圈资料,发现有关于sasl、acl相关的,准备试试。 简介 Kafka是一个高吞吐量、分布式的发布-订阅消息系统。Kafka核心模块使用Scala语言开发…

MySql入门教程--MySQL数据库基础操作

꒰˃͈꒵˂͈꒱ write in front ꒰˃͈꒵˂͈꒱ ʕ̯•͡˔•̯᷅ʔ大家好,我是xiaoxie.希望你看完之后,有不足之处请多多谅解,让我们一起共同进步૮₍❀ᴗ͈ . ᴗ͈ აxiaoxieʕ̯•͡˔•̯᷅ʔ—CSDN博客 本文由xiaoxieʕ̯•͡˔•̯᷅ʔ 原创 CSDN …

k8s的pod和svc相互访问时网络链路解析

k8s的pod和svc相互访问时网络链路解析 1. k8s环境中pod相互访问1.1. k8s中pod相互访问的整体流程1.2. k8s的相同机器的不同pod相互访问1.3. k8s的不同机器的不同pod相互访问 2. k8s访问svc2.1 nat操作2.2 流量进入到后端pod 3. 疑问和思考3.1 访问pod相互访问为什么不用做nat?…

【InternLM 实战营笔记】基于 InternLM 和 LangChain 搭建MindSpore知识库

InternLM 模型部署 准备环境 拷贝环境 /root/share/install_conda_env_internlm_base.sh InternLM 激活环境 conda activate InternLM 安装依赖 # 升级pip python -m pip install --upgrade pippip install modelscope1.9.5 pip install transformers4.35.2 pip install…

数据结构之单链表

目录 1.问题引入 2.主题介绍 2.1链表的概念和结构 2.2链表的分类 2.3单链表的实现 2.3.1接口实现 2.3.2函数实现 2.3.3函数测试 3.小结 halo,又和大家见面了,今天要给大家分享的是单链表的知识,跟着我的脚步,包学包会哦~ …

中电金信:技术实践|Flink维度表关联方案解析

导语:Flink是一个对有界和无界数据流进行状态计算的分布式处理引擎和框架,主要用来处理流式数据。它既可以处理有界的批量数据集,也可以处理无界的实时流数据,为批处理和流处理提供了统一编程模型。 维度表可以看作是用户来分析数…

人工智能|机器学习——K-means系列聚类算法k-means/ k-modes/ k-prototypes/ ......(划分聚类)

1.k-means聚类 1.1.算法简介 K-Means算法又称K均值算法,属于聚类(clustering)算法的一种,是应用最广泛的聚类算法之一。所谓聚类,即根据相似性原则,将具有较高相似度的数据对象划分至同一类簇,…

精读《精通 console.log》

1 引言 本周精读的文章是 Mastering JS console.log like a Pro,一起来更全面的认识 console 吧! 2 概述 & 精读 console 的功能主要在于控制台打印,它可以打印任何字符、对象、甚至 DOM 元素和系统信息,下面一一介绍。 c…