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

news2024/11/17 8:35:07

文章目录

    • 一、设计模式概述
      • (一)设计模式是什么
        • 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.coloradmin.cn/o/1516386.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Python/crawl】如何使用Python爬虫将一系列网页上的同类图片下载到本地

【需求】 从网页https://www.zhainq.com/%e7%be%8e%e5%a5%b3%e5%86%99%e7%9c%9f%e6%9c%ba%e6%9e%84/%e6%97%a5%e6%9c%ac%e7%be%8e%e5%a5%b3%e5%86%99%e7%9c%9f/109012.html 开始,有十七页,每页都有大漂亮“小濑田麻由”的若干图片,想要将其…

MySQL--索引类型详解

索引的类型 主键索引: PRIMARY KEY,当一张表的某个列是主键的时候,该列就是主键索引,一张表只允许有一个主键索引,主键所在的列不能为空。 创建主键索引的SQL语法: # 给user表中的id字段创建名为id_ind…

程序员会消失吗?这些互联网大佬们的观点怎么看

日夜敲代码开发出大模型的那群人,要被大模型颠覆了? “基本上说,以后其实不会存在程序员这种职业了。”不久前百度董事长李彦宏在一次电视节目中大胆预测。 类似地,近日英伟达 CEO 黄仁勋也在公开场合再次提起“编程无用论”&…

大语言模型:Query Rewriting for Retrieval-Augmented Large Language Models

总体思路 作者首先指出大语言模型虽然取得了很好的效果,但是仍然存在幻觉和时间顺序混乱的问题,因此需要额外知识库和LLM内部知识库相结合,来修正;因此优化传统的retriever-reader的方案成为需要;目前的研究方案当中使…

记录电脑运行jar包及其他部分软件弹窗显示中文乱码的解决思路(可参考解决其他中文乱码问题)

问题:发现java运行jar包显示内容中文乱码,几天时间没有解决问题,在用电脑的过程中,也遇到了其他软件中文乱码的问题,但是从窗口复制出来的文字放到文档里面是中文 开始运行jar包,显示中文乱码,于…

alibabacloud学习笔记09

讲解SpringCloud Gateway架构流程 讲解Gateway内置的路由断言 我们在配置文件中配置的断言。 这是我们的实现类,我们在写配置文件的时候,只需要写它的前缀就可以了。 Gateway内置的路由接口定时下线实战 在这个时间之后的时间就不能再通过路由去转发了。…

【海贼王的数据航海】栈和队列

目录 1 -> 栈 1.1 -> 栈的概念及结构 1.2 -> 栈的实现 1.2.1 -> Stack.h 1.2.2 -> Stack.c 1.2.3 -> Test.c 2 -> 队列 2.1 -> 队列的概念及结构 2.2 -> 队列的实现 2.2.1 -> Queue.h 2.2.2 -> Queue.c 1 -> 栈 1.1 -> 栈的…

devops-git【部署及配置】

1、安装Git Linux做为服务器端系统,Windows作为客户端系统,分别安装Git: 【服务器端】 输入git --version 若出现 -bash:git:command not found则需要安装git;服务器端:输入yum -y install git安装完后,…

蓝桥杯(1):python排序

1 基础 1.1 输出 1.1.1 去掉输出的空格 print("Hello","World",123,sep"") print("hello",world,123,sep) print(hello,world,123) #输出结果 #HelloWorld123 #helloworld123 #hello world 123 1.1.2 以不同的方式结尾 print(&quo…

【刷题训练】Leetcode415.字符串相加

字符串相加 题目要求 示例 1: 输入:num1 “11”, num2 “123” 输出:“134” 示例 2: 输入:num1 “456”, num2 “77” 输出:“533” 示例 3: 输入:num1 “0”, num2 “0”…

JavaScript中的Hoisting

概要 本文在Javascript的Execution Context文章基础上,从代码执行的角度来谈谈变量提升,已经为什么let和const的变量不能进行变量提升。 代码分析 var 关键字定义的变量 下面的代码并不会报错,可以正常执行。 console.log(a) var a 0;代…

陪诊小程序开发:暖心陪伴,就医无忧

在繁忙的生活中,就医往往成为了一件让人头疼的事情。挂号、取药、排队……一系列繁琐的流程让人应接不暇。为了让您就医更加便捷、舒心,我们推出了陪诊小程序,为您提供贴心、专业的陪诊服务。 陪诊小程序致力于为用户提供全方位的陪诊体验。…

FreeRTOS操作系统学习——中断管理

中断管理介绍 嵌入式实时系统需要对整个系统环境产生的事件作出反应。这些事件对处理时间和响应时间都有不同的要求。事件通常采用中断方式检测,中断服务例程(ISR)中的处理量应当越短越好。ISR是在内核中被调用的, ISR执行过程中,用户的任务…

校园生活信息平台:Java+Vue+MySQL全栈实践

✍✍计算机编程指导师 ⭐⭐个人介绍:自己非常喜欢研究技术问题!专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目:有源码或者技术上的问题欢迎在评论区一起讨论交流! ⚡⚡ Java实战 |…

【linux深入剖析】操作系统与用户之间的接口:自定义简易shell制作全过程

🍁你好,我是 RO-BERRY 📗 致力于C、C、数据结构、TCP/IP、数据库等等一系列知识 🎄感谢你的陪伴与支持 ,故事既有了开头,就要画上一个完美的句号,让我们一起加油 目录 1.shell2.自定义shell的准…

单据分页的实现

单据分页的实现 1. AceWzcgfkjtMaintainProxy.java package nc.ui.jych.wzcgfkjt.ace.serviceproxy;import nc.bs.framework.common.NCLocator; import nc.itf.jych.IWzcgfkjtMaintain; import nc.ui.uif2.components.pagination.IPaginationQueryService; import nc.vo.jych.…

从政府工作报告探计算机行业发展(在医疗健康领域)

从政府工作报告探计算机行业发展 政府工作报告作为政府工作的全面总结和未来规划,不仅反映了国家整体的发展态势,也为各行各业提供了发展的指引和参考。随着信息技术的快速发展,计算机行业已经成为推动经济社会发展的重要引擎之一。因此&…

如何在Linux系统部署APITable容器并实现无公网IP远程管理本地数据

文章目录 前言1. 部署APITable2. cpolar的安装和注册3. 配置APITable公网访问地址4. 固定APITable公网地址 前言 vika维格表作为新一代数据生产力平台,是一款面向 API 的智能多维表格。它将复杂的可视化数据库、电子表格、实时在线协同、低代码开发技术四合为一&am…

PMP成绩判定标准是什么?

2024年3月10日的PMP考试已经结束,不知道大家考得怎么样,对于考试难度有没有值得分享或者吐槽的?可以发出来大家交流一下~ 一、3月PMP考试成绩什么时候出? 按照往期考试成绩发布时间,基本在考后6-8周会出成绩&#xf…

OSCP靶场--Astronaut

OSCP靶场–Astronaut 考点(1.CVE-2021-21425getshell 2.suid php提权) 1.nmap扫描 ┌──(root㉿kali)-[~/Desktop] └─# nmap -sV -sC -p- 192.168.163.12 --min-rate 2500 Starting Nmap 7.92 ( https://nmap.org ) at 2024-03-14 01:24 EDT Nmap scan report for 192.16…