设计模式的基本概述

news2024/11/20 17:30:27

一.什么是设计模式

1.设计模式(Design Pattern)是前辈们对代码开发经验的总结,是解决特定问题的一系列套路,它不是语法规定,而是一套用来提高代码可复用性、可维护性、可读性、稳健性以及安全性的解决方案 。

2.1995 年,GoF(Gang ofFour,四人组/四人帮)合作出版了《设计模式:可复用面向对象软件的基础》一书,共收录了 23 种设计模式,从此树立了软件设计模式领域的里程碑,人称[GoF设计模式」。

二.学习设计模式的意义

1.设计模式的本质是面向对象设计原则的实际运用,是对类的封装性、继承性和多态性以及类的关联关系和组合关系的充分理解。

2.正确使用设计模式具有以下优点:
(1)可以提高程序员的思维能力、编程能力和设计能力。
(2)使程序设计更加标准化、代码编制更加工程化,使软件开发效率大大提高,从而缩短软件的开发周期。
(3)使设计的代码可重用性高、可读性强、可靠性高、灵活性好、可维护性强。

3.对于一些简单的程序开发,可能写一个简单的算法可能比设计模式更有意义,所以说学习设计模式,更重要的是理解它的思想和一些应用场景,每个业务针对的场景都不一样,设计模式它不一定就是最好的。

三.设计模式的基本要素

1.模式名称

根据模式的特点、问题、解决方案、 功能、效果来进行命名,可以有效的帮助我们记忆这个模式是干嘛的,也方便讨论自己的一些设计。

2.问题

描述了这个模式应用的一些环境,什么时候该去使用这个设计模式,解释了问题和问题存在的前因后果以及满足的一些条件。(比如说单列模式就是为了解决系统开销问题)

3.解决方案

包括设计模式的组成成分,它们之间的关系是怎么样的,还有就是它们是用来干嘛的,一个模式我们可以想成就是一个模版,它可以运用于不同场合,所以说解决方案不是用来描述一个特定或具体的一个实现,而是提供一个设计的抽象描述,重点是用来解决问题。

4.效果 

描述了这个模式应用的一些效果,以及该模式应该权衡的一些问题,考虑它的优缺点。  

四.Fof23

1.GoF 23
一种思维,一种态度,一种进步。

2.创建型模式(让对象的创建和使用分离):
单例模式、工厂模式、抽象工厂模式、建造者模式、原型模式。

3.结构型模式(让类和对象按照某种布局组成更大的结构):
适配器模式、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模式

3.行为型模式(描述类和对象之间怎么进行相互协作,共同完成单个对象无法完成的任务):
解释器模板方法模式,命令模式,迭代器模式,观察者模式,中介者模式,备忘录模式,模式,状态模式,策略模式,职责链模式,访问者模式。 

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

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

相关文章

小试牛刀-Anchor安装和基础测试

目录 一、编写目的 二、安装步骤 2.1 安装Rust 设置rustup镜像 安装Rust 2.2 安装node.js 2.3 安装Solana-CLI 2.4 安装Anchor CLI 三、Program测试 四、可能出现的问题 Welcome to Code Blocks blog 本篇文章主要介绍了 [Anchor安装和基础测试] 博主广交技术好友&…

如何在 Ubuntu 上安装 Emby 媒体服务器

Emby 是一个开源的媒体服务器解决方案,它能让你整理、流媒体播放和分享你的个人媒体收藏,包括电影、音乐、电视节目和照片。Emby 帮你集中多媒体内容,让你无论在家还是在外都能轻松访问。它还支持转码,让你能够播放各种格式的内容…

php交友源码交友系统源码相亲交友系统源码php社交系统php婚恋源码php社区交友源码vue 仿交友社交语聊技术栈

关于PHP交友、相亲、婚恋、社区交友系统的源码以及Vue仿交友社交语聊技术栈,以下是一些详细信息和建议: 一、PHP交友系统源码 系统架构设计 前端展示层:负责向用户提供直观友好的界面,包括注册登录页面、个人资料页面、匹配页面、…

【装饰珠——分组背包】

题目 代码 #include <bits/stdc.h> using namespace std; const int N 1e410; int cnt[5]; // 存兼容i等级及以下的孔的数目的桶 int l[N], p[N]; // l[i] i号珠子等级 p[i] i号珠子的上限 int w[N][8], f[N]; // w[i][j] i号珠子镶嵌j个的值 f[i] 孔数为i的最大值…

数据库审计工具--Yearning 3.1.9普民的使用指南

1 页面登录 登录地址:18000 &#xff08;不要勾选LDAP&#xff09; 2 修改用户密码 3 DML/DDL工单申请及审批 工单申请 根据需要选择【DML/DDL/查询】中的一种进行工单申请 填写工单信息提交SQL检测报错修改sql语句重新进行SQL检测&#xff0c;如检测失败可以进行SQL美化后…

Misc_01转二维码(不是二进制)

例题ctfhub/隐写v2.0 打开是一张图片 文件分离得到zip&#xff0c;爆破密码得到7878 打开得到0和1&#xff0c; !!!不是二进制转图片&#xff0c;直接是二维码 缩小能看到 000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000…

AI工具百宝箱|任意选择与Chatgpt、gemini、Claude等主流模型聊天的Anychat,等你来体验!

文章推荐 AI工具百宝箱&#xff5c;使用Deep Live Cam&#xff0c;上传一张照片就可以实现实时视频换脸...简直太逆天&#xff01; Anychat 这是一款可以与任何模型聊天 &#xff08;chatgpt、gemini、perplexity、claude、metal llama、grok 等&#xff09;的应用。 在页面…

[论文阅读] 异常检测综述 Deep Learning for Anomaly Detection: A Review(一)

深度学习在异常检测中的应用&#xff1a;综述 摘要 异常检测&#xff0c;又称离群点检测或新奇性检测&#xff0c;在各个研究领域中数十年来一直是一个持续且活跃的研究领域。仍然存在一些独特的问题复杂性和挑战&#xff0c;需要先进的方法来解决。近年来&#xff0c;基于深…

PaddlePaddle 开源产业级文档印章识别PaddleX-Pipeline “seal_recognition”模型 开箱即用篇(一)

AI时代到来&#xff0c;各行各业都在追求细分领域垂直类深度学习模型&#xff0c;今天给大家介绍一个PaddlePaddle旗下&#xff0c;基于PaddleX Pipeline 来完成印章识别的模型“seal_recognition”。 官方地址&#xff1a;https://github.com/PaddlePaddle/PaddleX/blob/relea…

Ubuntu 22.04 上快速搭建 Samba 文件共享服务器

Samba 简介 Samba 是一个开源软件&#xff0c;它扮演着不同操作系统间沟通的桥梁。通过实现 SMB&#xff08;Server Message Block&#xff09;协议&#xff0c;Samba 让文件和打印服务在 Windows、Linux 和 macOS 之间自由流动。 以下是 Samba 的特点&#xff1a; 跨平台兼…

语义分割(semantic segmentation)

语义分割(semantic segmentation) 文章目录 语义分割(semantic segmentation)图像分割和实例分割代码实现 语义分割指将图片中的每个像素分类到对应的类别&#xff0c;语义区域的标注和预测是 像素级的&#xff0c;语义分割标注的像素级的边界框显然更加精细。应用&#xff1a…

QT基础 UI编辑器 QT5.12.3环境 C++环境

一、UI编辑器 注意&#xff1a;创建工程时&#xff0c;要勾上界面按钮 UI设计师界面的模块 UI编辑器会在项目构建目录中自动生成一个ui_xxx.h&#xff08;构建一次才能生成代码&#xff09;&#xff0c;来表示ui编辑器界面的代码&#xff0c;属于自动生成的&#xff0c;一定不…

Jmeter的后置处理器(二)

5--JSR223 PostProcessor 功能特点 自定义后处理逻辑&#xff1a;使用脚本语言编写自定义的后处理逻辑。支持多种脚本语言&#xff1a;支持 Groovy、JavaScript、BeanShell 等脚本语言。动态参数传递&#xff1a;将提取的数据存储为变量&#xff0c;供后续请求使用。灵活性高…

高阶C语言之五:(数据)文件

目录 文件名 文件类型 文件指针 文件的打开和关闭 文件打开模式 文件操作函数&#xff08;顺序&#xff09; 0、“流” 1、字符输出函数fputc 2、字符输入函数fgetc 3、字符串输出函数fputs 4、 字符串输入函数fgets 5、格式化输入函数fscanf 6、格式化输出函数fpr…

【Android、IOS、Flutter、鸿蒙、ReactNative 】实现 MVP 架构

Android Studio 版本 Android Java MVP 模式 参考 模型层 model public class User {private String email;private String password;public User(String email, String password) {this.email = email;this.password = password;}public String getEmail() {return email;}…

如何管理服务中的 “昂贵” 资源

如果接触过实际大型业务系统&#xff0c;就能体会到许多业务的正常运行都依赖于各种昂贵的第三方接口&#xff0c;调用一次都是要花元子的&#xff0c;例如 大语言模型nlp 服务&#xff1a;信息提取、分类等cv 服务&#xff1a;定位、信息提取、分类等 然而经常可能由于各种无…

蓝桥杯每日真题 - 第16天

题目&#xff1a;&#xff08;卡牌&#xff09; 题目描述&#xff08;13届 C&C B组C题&#xff09; 解题思路&#xff1a; 题目分析&#xff1a; 有 n 种卡牌&#xff0c;每种卡牌的现有数量为 a[i]&#xff0c;所需的最大数量为 b[i]&#xff0c;还有 m 张空白卡牌。 每…

CSS遮罩:mask

CSS属性 mask 允许使用者通过遮罩或者裁切特定区域的图片的方式来隐藏一个元素的部分或者全部可见区域。 // 一般用位图图片做遮罩 mask: url(~/assets/images/mask.png); mask-size: 100% 100%;// 使用 SVG 图形中的形状来做遮罩 mask: url(~/assets/images/mask.svg#star);…

Zabbix:使用CentOS 9,基于LNMP平台,源码部署Zabbix 7。

ZBX&#xff1a;源码部署Zabbix 7 一、Zabbix概述1. 什么是zabbix2. 为什么学习zabbix3. 逻辑架构3. 实验环境4. 软件下载&#xff1a; 二、安装前的系统准备工作1. 配置主机名2. 关闭防火墙3. 关闭selinux4. 配置yum源5. 配置时钟同步6. 优化系统限制7. 安装JDK 三、部署LNMP环…