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

【GoF23种设计模式+简单工厂模式】

一、设计模式概述与类型

1.1、设计模式的一般定义:

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

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

  • 模式名称(Pattern Name):通过一两个词来描述模式的问题、解决方案和效果,以便更好地理解模式并方便开发人员之间的交流;
  • 问题(Problem):描述了应在何时使用模式,包含了设计中存在的问题以及问题存在的原因;
  • 解决方案(Solution):描述了一个设计模式的组成成分,以及这些组成成分之间的相互关系,各自的职责和协作方式,通常解决方案通过UML类图和核心代码来进行描述;
  • 效果(Consequences):描述了模式的优缺点以及在使用模式时应权衡的问题。

在学习每一个设计模式时至少应该掌握如下几点:这个设计模式的意图是什么,它要解决一个什么问题什么时候可以使用它;它是如何解决的,掌握它的结构图,记住它的关键代码;能够想到至少两个它的应用实例,一个生活中的,一个软件中的;这个模式的优缺点是什么,在使用时要注意什么。

1.2、设计模式的分类

根据用途,将设计模式分为3大类:创建者模式、结构型模式和行为型模式。

  1. 创建型模式(Creational Pattern):主要用于描述如何创建对象;
  2. 结构型模式(Structural Pattern):主要用于描述如何实现类或对象的组合;
  3. 行为型模式(Behavioral Pattern):主要用于描述类或对象怎样交互以及怎样分配职责。
类型模式名称

创建型模式(6个)

Creational Pattern

单例模式

Singleton Pattern

(不在GoF23设计模式中)

简单工厂模式

Simple Factory Pattern

工厂方法模式

Factory Method Pattern

抽象工厂模式

Abstract Pattern

原型模式

Prototype Pattern

建造者模式

Builder Pattern

结构型模式(7个)

Structural Pattern

适配器模式

Adapter Pattern

桥接模式

Bridge Pattern

组合模式

Composite Pattern

装饰模式

Decorator Pattern

外观模式

Facade Pattern

享元模式

Flyweight Pattern

代理模式

Proxy Pattern

行为型模式(11个)

Behavioral Pattern

职责链模式

Chain of Responsibility Pattern

命令模式

Command Pattern

解释器模式

Interpreter Pattern

迭代器模式

Iterator Pattern

中介者模式

Mediator Pattern

备忘录模式

Memento Pattern

观察者模式

Observer Pattern

状态模式

State Pattern

策略模式

Strategy Pattern

模板方法模式

Template Method Pattern

访问者模式

Visitor Pattern

相关文章:

【GoF23种设计模式+简单工厂模式】

一、设计模式概述与类型 1.1、设计模式的一般定义: 设计模式(Design Pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结,使用设计模式是为了可重用代码,让代码更容易被他人理解并且保证代…...

北醒单点激光雷达更改id和波特率以及Ubuntu20.04下CAN驱动

序言: 需要的硬件以及软件 1、USB-CAN分析仪使用顶配pro版本,带有支持ubuntu下的驱动包的,可以读取数据。 2、电源自备24V电源 3、单点激光雷达接线使用can线可以组网。 一、更改北醒单点激光雷达的id号和波特率 安装并运行USB-CAN分析仪自带…...

【线性代数】矩阵变换

一些特殊的矩阵 一,对角矩阵 1,什么是对角矩阵 表示将矩阵进行伸缩(反射)变换,仅沿坐标轴方向伸缩(反射)变换。 2,对角矩阵可分解为多个F1矩阵,如下: 二&a…...

聚焦智慧出行,TDengine 与路特斯科技再度携手

在全球汽车行业向电动化和智能化转型的过程中,智能驾驶技术正迅速成为行业的焦点。随着消费者对出行效率、安全性和便利性的需求不断提升,汽车制造商们需要在全球范围内实现低延迟、高质量的数据传输和处理,以提升用户体验。在此背景下&#…...

虚拟机迁移报错:虚拟机版本与主机“x.x.x.x”的版本不兼容

1.虚拟机在VCenter上从一个ESXi迁移到另一个ESXi上时报错:虚拟机版本与主机“x.x.x.x”的版本不兼容。 2.例如从10.0.128.13的ESXi上迁移到10.0.128.11的ESXi上。点击10.0.128.10上的任意一台虚拟机,查看虚拟机版本。 3.确认要迁移的虚拟机磁盘所在位…...

【教程】vscode添加powershell7终端

win10自带的 powershell 是1.0版本的,太老了,更换为powershell7后,在 vscode 的集成终端中没有显示本篇教程记录在vscode添加powershell7终端的过程 打开vscode终端配置 然后来到这个页面进行设置 查看 powershell7 的安装位置&#xff…...

如何乘上第四次工业革命的大船

如何乘上第四次工业革命的大船 第四次工业革命通常被认为是信息技术和数字化时代的到来,但具体影响哪些产业,以及它将如何演变和展开,仍然是一个广泛讨论的话题。 然而,已经可以看到一些领域可能受到第四次工业革命的深远影响,例如人工智能、物联网、大数据、生物技术、可…...

RKNN执行bash ./build-linux_RK3566_RK3568.sh 报错

目录 报错信息: 原因分析: 解决办法: 报错信息: CMake Error at /usr/share/cmake-3.22/Modules/CMakeDetermineCCompiler.cmake:49 (message): Could not find compiler set in environment variable CC: aarch64-linux-gnu-gcc. Call Stack (most recent call fir…...

Linux常用命令整理

本文将分享一些常用的Linux命令。根据功能的不同,大概分为以下几个方面,一是文件相关命令,二是进程相关命令,三是网络相关命令,四是磁盘相关命令,五是用户管理相关命令,六是系统命令。 1. 文件…...

python 闭包、装饰器

一、闭包: 1. 外部函数嵌套内部函数 2. 外部函数返回内部函数 3.内部函数可以访问外部函数局部变量 闭包(Closure)是指在一个函数内部定义的函数,并且内部函数可以访问外部函数的局部变量,即使外部函数已经执行…...

[pycharm]解决pycharm运行程序出现卡住scanning files to index索引的问题

有时候会出现索引问题,显示scanning files to index 解决方法: in pycharm, go to the "File" on the left top, then select "invalidate caches/restart...", and press "invalidate and restart". 然后等它自己重启…...

python每日学习11:numpy库的用法(下)

python每日学习11:numpy库的用法(下) 数组的拼接 名方法称说明concatenate连接沿现有轴的数组序列hstack水平堆叠序列中的数组(列方向)vstack竖直堆叠序列中的数组(行方向)concatenate函数用于沿指定轴连接相同形状的两…...

【Emacs有什么优点,用Emacs写程序真的比IDE更方便吗?】

🎥博主:程序员不想YY啊 💫CSDN优质创作者,CSDN实力新星,CSDN博客专家 🤗点赞🎈收藏⭐再看💫养成习惯 ✨希望本文对您有所裨益,如有不足之处,欢迎在评论区提出…...

6、基于Fabirc 2.X 通用电子存证系统部署

evidence 将GOPATH设置为/root/go,拉取项目: cd $GOPATH/src && git clone https://gitee.com/henan-minghua_0/evidence.git 在/etc/hosts中添加: 127.0.0.1 orderer.example.com 127.0.0.1 peer0.org1.example.com 127.0.0.1 peer1.org…...

Linux Vim 由浅入深的教程

引言 原文链接 Vim是Linux系统中非常强大的文本编辑器,因其强大的功能和灵活的操作而受到广泛使用。尤其是在服务器管理和开发环境中,Vim几乎是必备工具。本教程将以CentOS 7为例,详细讲解Vim的安装、基本操作以及一些高级技巧,…...

MIT6.824(6.5840) Lab1笔记+源码

文章目录 其他人的内容,笔记写的更好,思路可以去看他们的MapReduceworkermapreduce coordinatorrpc纠错 源码worker.gocoordinator.gorpc.go 原本有可借鉴的部分 mrsequential.go,多看几遍源码 其他人的内容,笔记写的更好&#xf…...

【目录】8051汇编与C语言系列教程

8051汇编与C语言系列教程 作者将狼才鲸创建日期2024-07-23 CSDN文章地址:【目录】8051汇编与C语言系列教程本Gitee仓库原始地址:才鲸嵌入式/8051_c51_单片机从汇编到C_从Boot到应用实践教程 一、本教程目录 序号教程名称简述教程链接1点亮LCD灯通过IO…...

群管机器人官网源码

一款非常好看的群管机器人html官网源码 搭建教程: 域名解析绑定 源码文件上传解压 访问域名即可 演示图片: 群管机器人官网源码下载:客户端下载 - 红客网络编程与渗透技术 原文链接: 群管机器人官网源码...

整合EasyExcel实现灵活的导入导出java

引入pom依赖 <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId></dependency>实现功能 结合Vue前端&#xff0c;实现浏览器页面直接导出日志文件实现文件的灵活导入文件导出 3. 实体类 实体类里有自定义转…...

springSecurity学习之springSecurity web如何取得用户信息

web如何取得用户信息 之前说过SecurityContextHolder默认使用的是ThreadLocal来进行存储的&#xff0c;而且每次都会清除&#xff0c;但是web每次请求都会验证用户权限&#xff0c;这是如何做到的呢&#xff1f; 这是通过SecurityContextPersistenceFilter来实现的&#xff0…...

如何快速创建专业图表:Mermaid数据可视化的完整指南

如何快速创建专业图表&#xff1a;Mermaid数据可视化的完整指南 【免费下载链接】mermaid mermaid-js/mermaid: 是一个用于生成图表和流程图的 Markdown 渲染器&#xff0c;支持多种图表类型和丰富的样式。适合对 Markdown、图表和流程图以及想要使用 Markdown 绘制图表和流程图…...

MiroFish群体智能引擎部署与配置全指南

MiroFish群体智能引擎部署与配置全指南 【免费下载链接】MiroFish A Simple and Universal Swarm Intelligence Engine, Predicting Anything. 简洁通用的群体智能引擎&#xff0c;预测万物 项目地址: https://gitcode.com/GitHub_Trending/mi/MiroFish MiroFish作为简洁…...

大模型上下文长度的优化策略与应用场景

1. 大模型上下文长度的本质与挑战 当你和ChatGPT聊天时&#xff0c;有没有遇到过它突然"失忆"的情况&#xff1f;比如聊到第20轮对话时&#xff0c;它完全忘记了开头讨论的主题。这就是上下文长度限制导致的典型问题。所谓上下文长度&#xff0c;就是大模型能够记住和…...

3分钟上手AnyKernel3:打造跨设备兼容的Android内核刷机包

3分钟上手AnyKernel3&#xff1a;打造跨设备兼容的Android内核刷机包 【免费下载链接】AnyKernel3 项目地址: https://gitcode.com/gh_mirrors/an/AnyKernel3 在Android内核开发领域&#xff0c;如何让一个内核兼容多种设备和ROM版本一直是个挑战。AnyKernel3正是为解决…...

别急着升级glibc!解决scikit-learn的libgomp内存错误,我更推荐这个方法

生产环境避坑指南&#xff1a;如何优雅解决scikit-learn的libgomp内存分配错误 当你的AI服务突然抛出cannot allocate memory in static TLS block错误时&#xff0c;第一反应可能是升级系统库——但请先放下这个危险的念头。作为经历过三次生产环境崩溃的运维老兵&#xff0c;…...

自动化伦理探讨:OpenClaw百川2-13B-4bits在个人数据处理的权限边界

自动化伦理探讨&#xff1a;OpenClaw百川2-13B-4bits在个人数据处理的权限边界 1. 当AI开始操控我的电脑 第一次看到OpenClaw在我的MacBook上自动整理桌面文件时&#xff0c;那种震撼感至今难忘。这个开源的AI智能体框架正在我的终端里移动鼠标光标&#xff0c;将散落的PDF按…...

HAT:突破效率与精度瓶颈的图像超分辨率解决方案

HAT&#xff1a;突破效率与精度瓶颈的图像超分辨率解决方案 【免费下载链接】HAT CVPR2023 - Activating More Pixels in Image Super-Resolution Transformer Arxiv - HAT: Hybrid Attention Transformer for Image Restoration 项目地址: https://gitcode.com/gh_mirrors/h…...

数据架构现代化:AI应用落地的关键突破口

数据架构现代化&#xff1a;AI应用落地的关键突破口 一、引言&#xff1a;为什么你的AI项目总卡在“数据关”&#xff1f; 1. 一个扎心的真实场景 去年&#xff0c;我遇到一位零售企业的技术负责人&#xff0c;他的困惑让我印象深刻&#xff1a;“我们花了12个月、近500万预算&…...

网易云音乐无损解析:5大核心技术构建个人高品质音乐库

网易云音乐无损解析&#xff1a;5大核心技术构建个人高品质音乐库 【免费下载链接】Netease_url 网易云无损解析 项目地址: https://gitcode.com/gh_mirrors/ne/Netease_url 在数字音乐时代&#xff0c;如何突破平台限制&#xff0c;建立个人专属的高品质音乐库&#xf…...

关于我使用MinMix创建了一个Tailwindcss学习网站

一、语言特性&#xff1a;Java 26 与模式匹配进化 1.1 Java 26 语言级别支持 IDEA 2026.1 EAP 最引人注目的变化之一&#xff0c;就是新增 Java 26 语言级别支持。这意味着开发者可以提前体验和测试即将在 JDK 26 中正式发布的语言特性。 其中最重要的变化是对 JEP 530 的全…...