当前位置: 首页 > news >正文

什么是设计模式(第7章笔记)

目录

一、什么是设计模式

二、设计模式概要

1、名称

2、问题

3、解决方案

4、效果

三、《设计模式》的结构

四、小结


一、什么是设计模式

设计模式:是对已经分析过的问题,以及相关问题解决方案的优秀实践;

1、同样的问题总是重复出现,随着经验的积累,总结出一些非正式的、可在项目中复用的技术,这些技术就是设计模式;设计模式记录并规范了这些问题和解决方案;

2、模式本质是自下而上,而非自上而下的。主要来源于实践。

3、设计模式并非实战案例,实战案例解决方法可以小改动就能直接使用,而设计模式记录的是特定问题的解决方案。不同环境(编程语言不同、应用特性、项目规模)实现细节可能会有所差异

注意:需要防止滥用设计模式,例如没有出现对应的问题,却使用了解决方案。

二、设计模式概要

设计模式核心组成:名称、问题、解决方案和效果。

1、名称

名称必须兼顾简洁性和描述性,找好的名字一直是开发模式目录中最困难的部分之一

2、问题

问题和问题发生的环境是模式的基础,识别问题比使用解决方案更难。这是有时设计模式会被误用或过度使用的原因之一;

3、解决方案

尽管模式描述了一个问题的一种解决方法,但实现可能会有很多细微差别,切勿盲目照搬书本上的步骤。应当以模式为基础,根据实际情况随机应变,才是最实用的方法。

《企业应用架构模式》的作者福勒,称模式中的解决方案为“半成品”,也就是说,程序员必须理解解决方案的概念并自己实现解决方案

4、效果

三、《设计模式》的结构

1、意图:对模式目的的简要概括;

2、动机:用一个典型的场景描述问题;

3、适用性:查看模式适用于哪些场景,定义具体场景;

4、结构/交互:描述类和对象关系的UML类图和交互图;

5、实现:实现方案的细节,部署解决方案的技巧;

6、示例代码:简单的示例代码是理解模式的捷径,突出解决方案的核心内容;

7、已知应用:描述了使用模式的真实系统,至少出现在3个公开存在的系统时,模式才能成为真正的模式,称为“三法则”;

8、相关模式:有些模式会与其他模式相关联;

四、小结

小结:设计模式并非固定的解决方案,设计模式是解决了一般性问题的通用方法。这些解决方案提现了关键的设计原则。

相关文章:

什么是设计模式(第7章笔记)

目录 一、什么是设计模式 二、设计模式概要 1、名称 2、问题 3、解决方案 4、效果 三、《设计模式》的结构 四、小结 一、什么是设计模式 设计模式:是对已经分析过的问题,以及相关问题解决方案的优秀实践; 1、同样的问题总是重复出现&…...

【python入门】day27: 模拟高铁售票系统

界面 代码 #-*- coding:utf-8 -*- import prettytable as pt#---------导入漂亮表格 import os.path filename ticket.txt#更新座位状态 def update(row_num):#------更新购票状态with open(filename,w,encodingutf-8) as wfile:for i in range(row_num):lst1 [f{i1},有票,有…...

智能助手的巅峰对决:ChatGPT对阵文心一言

在人工智能的世界里,ChatGPT与文心一言都是备受瞩目的明星产品。它们凭借先进的技术和强大的性能,吸引了大量用户的关注。但究竟哪一个在智能回复、语言准确性、知识库丰富度等方面更胜一筹呢?下面就让我们一探究竟。 首先来谈谈智能回复能力…...

Android系统开发之浅谈广播接收器回调

广播接器BroadcastReceiver 广播Intent和广播接收器BroadcastReceiver,是大家android开发用的特别多的二个控件。 那如何从系统角度看待广播和广播接收器呢? 对于静态注册BroadcastReceiver和动态注册的BroadcastReceiver是如何回调其onReceive方法呢…...

PiflowX如何快速开发flink程序

PiflowX如何快速开发flink程序 参考资料 Flink最锋利的武器:Flink SQL入门和实战 | 附完整实现代码-腾讯云开发者社区-腾讯云 (tencent.com) Flink SQL 背景 Flink SQL 是 Flink 实时计算为简化计算模型,降低用户使用实时计算门槛而设计的一套符合标…...

Mysql运算符

文章目录 比较运算符< > !IS NULL \ IS NOT NULL \ ISNULLLEAST() \ GREATEST() 查询数据大小&#xff08;字典序&#xff09;BETWEEN...AND...IN (SET) \ NOT IN (SET)LIKE 模糊查询REGEXP \ RLIKE 逻辑运算符逻辑运算符&#xff1a; OR &#xff08;||&#xff09;、A…...

软件架构之事件驱动架构

一、定义 事件驱动的架构是围绕事件的发布、捕获、处理和存储&#xff08;或持久化&#xff09;而构建的集成模型。 某个应用或服务执行一项操作或经历另一个应用或服务可能想知道的更改时&#xff0c;就会发布一个事件&#xff08;也就是对该操作或更改的记录&#xff09;&am…...

C++ 后端面试 - 题目汇总

文章目录 &#x1f37a; 非技术问题&#x1f37b; 基本问题&#x1f942; 请自我介绍&#xff1f;&#x1f942; 你有什么问题需要问我的&#xff1f; &#x1f37b; 加班薪资&#x1f942; 你对加班有什么看法&#xff1f;&#x1f942; 你的薪资期望是多少&#xff1f;【待回…...

zds1104示波器使用指南

1、设置语言 2、功能检测验证示波器是否正常工作 3、示波器面板按钮详解 3.1、软键 3.2、运行控制与操作区 3.3、水平控制区 3.4、垂直控制区 3.5、多功能控制区 3.6、断电启动恢复&#xff0c;auto setup&#xff0c;default setup&#xff0c;恢复出厂设置详细解释 3.7、触…...

uni-app修改头像和个人信息

效果图 代码&#xff08;总&#xff09; <script setup lang"ts"> import { reqMember, reqMemberProfile } from /services/member/member import type { MemberResult, Gender } from /services/member/type import { onLoad } from dcloudio/uni-app impor…...

IDEA 中搭建 Spring Boot Maven 多模块项目 (父SpringBoot+子Maven)

第1步&#xff1a;新建一个SpringBoot 项目 作为 父工程 [Ref] 新建一个SpringBoot项目 删除无用的 .mvn 目录、 src 目录、 mvnw 及 mvnw.cmd 文件&#xff0c;最终只留 .gitignore 和 pom.xml 第2步&#xff1a;创建 子maven模块 第3步&#xff1a;整理 父 pom 文件 ① …...

竞赛保研 基于计算机视觉的身份证识别系统

0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 基于机器视觉的身份证识别系统 该项目较为新颖&#xff0c;适合作为竞赛课题方向&#xff0c;学长非常推荐&#xff01; &#x1f9ff; 更多资料, 项目分享&#xff1a; https://gitee.com/dancheng-sen…...

在visual studio中调试时无法查看std::wstring

1.问题 在调试的时候发现std::wstring类型的变量查看不了&#xff0c;会显示(error)|0&#xff0c;百思不得其解。 2.解决方法 参考的&#xff1a;vs2015调试时无法显示QString变量的值&#xff0c;只显示地址_vs调试qstring的时候如何查看字符串-CSDN博客 在工具/选项/调试…...

2023年全国职业院校技能大赛高职组应用软件系统开发正式赛题—模块三:系统部署测试

模块三&#xff1a;系统部署测试&#xff08;3 小时&#xff09; 一、模块考核点 模块时长&#xff1a;3 小时模块分值&#xff1a;20 分本模块重点考查参赛选手的系统部署、功能测试、Bug 排查修复及文档编写能力&#xff0c;具体包括&#xff1a;系统部署。将给定项目发布到…...

微信小程序上传并显示图片

实现效果&#xff1a; 上传前显示&#xff1a; 点击后可上传&#xff0c;上传后显示&#xff1a; 源代码&#xff1a; .wxml <view class"{{company_logo_src?blank-area:}}" style"position:absolute;top:30rpx;right:30rpx;height:100rpx;width:100rp…...

java基础知识点系列——数据输入(五)

java基础知识点系列——数据输入&#xff08;五&#xff09; 数据输入概述 Scanner使用步骤 &#xff08;1&#xff09;导包 import java.util.Scanner&#xff08;2&#xff09;创建对象 Scanner sc new Scanner(System.in)&#xff08;3&#xff09;接收数据 int i sc…...

MySQL面试题 | 07.精选MySQL面试题

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…...

C语言中关于指针的理解及用法

关于指针意思的参考&#xff1a;https://baike.baidu.com/item/%e6%8c%87%e9%92%88/2878304 指针 指针变量 地址 野指针 野指针就是指针指向的位置是不可知的&#xff08;随机的&#xff0c;不正确的&#xff0c;没有明确限制的&#xff09; 以下是导致野指针的原因 1.指针…...

软件测试|深入理解Python中的re.search()和re.findall()区别

前言 在Python中&#xff0c;正则表达式是一种强大的工具&#xff0c;用于在文本中查找、匹配和处理模式。re 模块提供了许多函数来处理正则表达式&#xff0c;其中 re.search()和 re.findall() 是常用的两个函数&#xff0c;用于在字符串中查找匹配的模式。本文将深入介绍这两…...

❤ Vue3 完整项目太白搭建 Vue3+Pinia+Vant3/ElementPlus+typerscript(一)yarn 版本控制 ltb (太白)

❤ 项目搭建 一、项目信息 Vue3 完整项目搭建 Vue3PiniaVant3/ElementPlustyperscript&#xff08;一&#xff09;yarn 版本控制 项目地址&#xff1a; 二、项目搭建 &#xff08;1&#xff09;创建项目 yarn create vite <ProjectName> --template vueyarn install …...

基于YOLOv8深度学习的蘑菇毒性检测系统(YOLOv8+YOLO数据集+UI界面+Python项目源码+模型)

一、项目介绍 摘要 随着人们对于野生菌菇膳食兴趣的增加以及户外采摘活动的普及&#xff0c;误食有毒蘑菇的事件频发&#xff0c;对公众健康构成了严重威胁。传统的蘑菇种类鉴别高度依赖专家的形态学经验&#xff0c;普通爱好者难以准确掌握&#xff0c;且现有识别应用在应对…...

Intv_AI_MK11 Anaconda数据科学环境配置:一站式AI研发平台搭建

Intv_AI_MK11 Anaconda数据科学环境配置&#xff1a;一站式AI研发平台搭建 1. 为什么选择Anaconda搭建AI开发环境 如果你刚开始接触AI开发&#xff0c;可能会被各种环境配置问题困扰。不同框架的版本兼容性、CUDA驱动安装、Python包依赖冲突...这些问题足以让新手望而却步。A…...

cv_unet_image-colorization部署案例:RTX显卡5分钟搭建AI上色工作站

cv_unet_image-colorization部署案例&#xff1a;RTX显卡5分钟搭建AI上色工作站 1. 项目简介 你是否遇到过这样的情况&#xff1a;翻看老照片时&#xff0c;发现很多珍贵的黑白照片已经褪色发黄&#xff0c;想要恢复色彩却不知道从何下手&#xff1f;或者作为摄影师&#xff…...

保姆级教程:用ArduPilot给无人车/船配置避障(附MR72雷达、TFmini Plus参数)

保姆级教程&#xff1a;用ArduPilot为无人车/船配置毫米波与激光雷达避障系统 当你的无人车在野外自动巡航时突然检测到前方障碍物&#xff0c;是紧急刹车还是智能绕行&#xff1f;水面无人船在夜间航行如何避开漂浮物&#xff1f;本文将手把手带你完成从硬件选型到参数调优的全…...

SAP 生产订单批量创建与下达实战:基于 BAPI_PRODORD_CREATE 的自动化方案

1. 为什么需要批量创建生产订单&#xff1f; 在制造业的实际业务场景中&#xff0c;生产计划部门经常需要根据销售订单、预测数据或库存情况&#xff0c;一次性生成大量生产订单。想象一下&#xff0c;一个汽车零部件工厂每月要处理上千个零部件的生产计划&#xff0c;如果每个…...

ECharts折线图入门学习:从基础到实战的完整指南

引言 折线图是数据可视化中最常用的图表类型之一&#xff0c;特别适合展示数据随时间变化的趋势。ECharts作为一款功能强大的JavaScript可视化库&#xff0c;提供了丰富的配置选项和交互功能&#xff0c;能够轻松创建出专业、美观的折线图。本文将带领大家从零开始学习ECharts折…...

intv_ai_mk11镜像部署教程:3条命令完成服务启动、状态检查、日志监控

intv_ai_mk11镜像部署教程&#xff1a;3条命令完成服务启动、状态检查、日志监控 1. 快速了解intv_ai_mk11 intv_ai_mk11是一款基于7B参数Llama架构的AI对话机器人&#xff0c;它能帮助你完成各种任务&#xff1a; 回答各类问题&#xff08;技术、生活、知识等&#xff09;辅…...

3步快速上手!终极缠论量化工具:基于TradingView本地SDK的几何交易可视化完整指南

3步快速上手&#xff01;终极缠论量化工具&#xff1a;基于TradingView本地SDK的几何交易可视化完整指南 【免费下载链接】chanvis 基于TradingView本地SDK的可视化前后端代码&#xff0c;适用于缠论量化研究&#xff0c;和其他的基于几何交易的量化研究。 缠论量化 摩尔缠论 缠…...

智慧树自动化学习工具终极指南:解放双手,高效完成课程学习

智慧树自动化学习工具终极指南&#xff1a;解放双手&#xff0c;高效完成课程学习 【免费下载链接】fuckZHS 自动刷智慧树课程的脚本 项目地址: https://gitcode.com/gh_mirrors/fu/fuckZHS 智慧树自动化学习工具是一款专为智慧树平台设计的Python脚本&#xff0c;能够帮…...

别再死记参数了!深入Halcon measure_pos算子底层:从高斯滤波到亚像素边缘的完整推导

深入解析Halcon measure_pos算子&#xff1a;从数学原理到工程调优 在工业视觉检测领域&#xff0c;亚像素级边缘检测一直是核心难题。当我们使用Halcon这类专业工具时&#xff0c;measure_pos算子看似简单易用&#xff0c;但真正理解其底层机制的人却寥寥无几。本文将带您穿透…...