设计模式——设计模式介绍

设计模式

设计模式介绍

设计模式:

  • 系统服务设计中针对场景的一种解决方案,可以解决功能逻辑开发中的共性问题,并非所有问题
  • 一种开发思想,每个设计模式都有解决某一类问题的概念模型,不要拘束于一种的固定的代码格式,要根据具体场景做出变化
  • 同一种设计模式,不同场景,不同代码实现方式,以及不同开发人员去实现,都会有不同的代码方案
  • 高内聚、低耦合和可复用的特点
  • 在组件中使用比较频繁,比如:RPC框架,引擎的决策树等
  • 主要通过实际案例来理解学习,不要只通过硬背概念,这样实际应用中存在问题

设计模式的类型:

创建型模式:
工厂方法模式(Factory Method Pattern)定义一个用于创建对象的接口,让子类决定实例化哪个类。工厂方法模式使一个类的实例化延迟到其子类
抽象工厂模式(Abstract Factory Pattern)提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类
生成器模式(Builder Pattern)将一个复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的表示
原型模式(Prototype Pattern)用于创建重复的对象,同时又能保证性能。通过复制现有对象的实例来生成新对象
单例模式(Singleton Pattern)确保一个类只有一个实例,并提供一个全局访问点
结构型模式:
适配器模式(Adapter Pattern)将一个类的接口转换成客户端期望的另一个接口。适配器模式使得原本由于接口不兼容而不能在一起工作的那些类可以一起工作
代理模式(Proxy Pattern)为其他对象提供一种代理以控制对这个对象的访问。代理模式常用于实现延迟加载、权限控制等功能
桥接模式(Bridge Pattern)将抽象部分与它的实现部分分离,使它们可以独立变化。桥接模式主要用于处理多维度变化的场景
组合模式(Composite Pattern)将对象组合成树形结构以表示“部分-整体”的层次结构。组合模式使得客户端对单个对象和组合对象的使用具有一致性
装饰器模式(Decorator Pattern)动态地给一个对象添加一些额外的职责,装饰模式相比生成子类更灵活。它是继承关系的一个替代方案
外观模式(Facade Pattern)提供一个统一的接口,用来访问子系统中的一群接口。外观模式定义了一个高层接口,使子系统更易于使用
享元模式(Flyweight Pattern)通过共享技术来有效地支持大量细粒度对象的复用,以减少内存使用和提高性能
行为模式:
责任链模式(Chain of Responsibility Pattern)为解除请求的发送者和接收者之间的耦合,而使多个对象都有机会处理这个请求。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止
命令模式(Command Pattern)将一个请求封装为一个对象,从而使你可以用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作
迭代器模式(Iterator Pattern)提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露其内部表示。迭代器模式可以有效地遍历集合对象而无需暴露其内部结构
中介者模式(Mediator Pattern)用于减少对象之间的直接交互,而是通过一个中介对象来协调对象之间的交互
备忘录模式(Memento Pattern)在不破坏封装性的前提下捕获和恢复对象的内部状态。备忘录模式通常用于需要实现撤销操作或者历史记录功能的场景,它允许我们保存对象的状态,并在需要时将其恢复到之前的状态
观察者模式(Observer Pattern)定义对象间的一种一对多的依赖关系,使得每当一个对象状态发生改变时,其相关依赖对象都会得到通知并自动更新
状态模式(State Pattern)允许对象在内部状态改变时改变它的行为,对象看起来似乎修改了它的类
策略模式(Strategy Pattern)定义一系列算法,将每一个算法封装起来,并且使它们可以互相替换。策略模式让算法的变化独立于使用算法的客户
模板方法模式(Template Method Pattern)定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤
访问者模式(Visitor Pattern)封装作用于某数据结构中的各元素的操作,它可以在不改变数据结构的前提下定义作用于这些元素的新操作
实际开发中用到较多的模式:
  • 工厂方法模式
  • 抽象工厂模式
  • 单例模式
  • 适配器模式
  • 组合模式
  • 代理模式
  • 迭代器模式
  • 策略模式
  • 模板模式

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

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

相关文章

LangChain:如何高效管理 LLM 聊天历史记录?

LangChain 团队发布了一篇关于使用 Dragonfly DB 来有效管理 LangChain 应用程序聊天历史记录的教程。 该教程旨在解决用户在使用 LangChain 应用程序时普遍遇到的一个问题:如何高效地管理聊天历史记录。 LangChain 团队在推文中强调了 Dragonfly DB 在管理聊天历…

Spring (59)如何在Spring中实现异步处理

在Spring中实现异步处理通常涉及到Async注解。这个注解允许你以异步的方式执行方法,即方法的调用将立即返回,而实际的执行将在不同的线程上异步进行。 使用Async的步骤: 启用异步支持:在配置类上使用EnableAsync注解&#xff0c…

【vue3|第12期】Vue3的Props详解:组件通信

日期:2024年6月19日 作者:Commas 签名:(ง •_•)ง 积跬步以致千里,积小流以成江海…… 注释:如果您觉得有所帮助,帮忙点个赞,也可以关注我,我们一起成长;如果有不对的地方&#xf…

【Redis】黑马点评短信登录

https://blog.csdn.net/qq_33888850/article/details/129770077 https://blog.csdn.net/weixin_51515308/article/details/128010464 https://www.bilibili.com/video/BV1cr4y1671t?p24 导入数据库 https://github.com/MagicToDo/hm-dianping sql文件在 hm-dianping-init\src…

【线性代数】【一】1.6 矩阵的可逆性与线性方程组的解

文章目录 前言一、求解逆矩阵二、线性方程组的解的存在性总结 前言 前文我们引入了逆矩阵的概念,紧接着我们就需要讨论一个矩阵逆的存在性以及如何求解这个逆矩阵。最后再回归上最初的线性方程组的解,分析其中的联系。 一、求解逆矩阵 我们先回想一下在…

计算机网络:运输层 - TCP首部格式 连接的创建与释放

计算机网络:运输层 - TCP首部格式 & 连接的创建与释放 TCP首部格式源端口 目的端口序号确认号数据偏移保留控制位窗口检验和紧急指针 TCP连接创建 - 三次握手TCP传输过程TCP连接释放 - 四次挥手 TCP首部格式 TCP的首部如下: 首部的前20 byte是固定的…

如何验证证书的合法性

在当今的互联网世界中,证书验证是确保信息安全的关键环节。证书,特别是数字证书,用于确认实体的身份以及信息的完整性和真实性。然而,验证证书的合法性并非一蹴而就,它涉及多个技术难点、面试官的关注点、回答吸引力以…

【物联网】室内定位技术及定位方式简介

目录 一、概述 二、常用的室内定位技术 2.1 WIFI技术 2.2 UWB超宽带 2.3 蓝牙BLE 2.4 ZigBee技术 2.5 RFID技术 三、常用的室内定位方式 3.1 信号到达时间 3.2 信号到达时间差 3.3 信号到达角 3.4 接收信号强度 一、概述 GPS是目前应用最广泛的定位技术&#xff0…

一种基于稀疏学习的旋转机械故障诊断方法(MATLAB)

稀疏表示方法是一种利用最少原子在过完备字典上表示或逼近信号的方法,该方法具有信号表示的高分辨率、稀疏性、强抗干扰能力和自适应性等优点。稀疏表示聚焦于设计合适的稀疏表示字典和挖掘有用的稀疏先验信息,其核心思想是将故障特征信息近似表示为字典…

深入理解C++红黑树

目录 一、引言 二、红黑树的基本概念 三、红黑树的性质 四、红黑树的实现 结构 插入 五、红黑树的应用 一、引言 红黑树(Red-Black Tree)是一种自平衡的二叉搜索树,它可以在插入、删除和查找操作中保持相对高效的性能。由于其独特的性…

Linux下VSCode的安装和基本使用

应用场景:嵌入式开发。 基本只需要良好的编辑环境,能支持文件搜索和跳转,就挺OK的。 之所以要在Linux下安装,是因为在WIN11上安装后,搜索功能基本废了,咋弄都弄不好,又不方便重装win系统&#x…

LLM功能应用的测试艺术:策略与实践

在人工智能技术日新月异的今天,大规模语言模型(LLMs)凭借其强大的自然语言处理能力,正逐渐成为众多应用和服务的核心驱动力。从智能客服到创作辅助,从信息检索到个性化推荐,LLMs的广泛应用对测试策略提出了全新的挑战。本文旨在探讨针对拥有LLM功能的应用或软件,如何制定…

韩顺平0基础学java——第29天

p592-599 线程 用户线程和守护线程 1.用户线程:也叫工作线程,当线程的任务执行完或通知方式结束 2守护线程:一般是为工作线程服务的,当所有的用户线选束,守护线程自动结束 3.常见的守护线程:垃圾回收机制 当我们希望当main线程结束后&…

Scala中的map函数

Scala中的map函数 在 Scala 中,map 是一种常见的高阶函数,用于对集合中的每个元素应用一个函数,并返回应用了该函数后的新集合,保持原始集合的结构不变。它的主要作用有以下几点: 1. 遍历集合: map 可以遍历…

2.APP测试-安卓adb抓取日志

1.打开手机的开发者模式,打开USB调试 (1)小米手机打开开发者模式: 【设置】-【我的设备】-【全部参数信息】-快速多次点击【OS版本】-进入开发者模式 (2)连接手机和电脑,手机打开USB调试 【设置…

05 - matlab m_map地学绘图工具基础函数 - 设置比例尺指北针

05 - matlab m_map地学绘图工具基础函数 - 设置比例尺指北针 0. 引言1. 关于m_scale2. 关于m_ruler3. 关于m_northarrow4. 结语 0. 引言 本篇介绍下m_map中添加指北针(m_northarrow)、比例尺(m_ruler)和进行比例缩放(m_scale)的函数及其用法 。 1. 关于m_scale m_scale用于图件…

响应式高端网站模板源码图库素材 资源下载平台源码

源码介绍 亲测可用,可用于做娱乐网资源网,功能非常的齐全无任何加密也无任何后门!响应式高端网站模板源码图库素材 资源下载平台源码(可运营) 页面很美观,堪比大型网站的美工,而且页面做的也很…

扫码称重上位机

目录 一 设计原型 二 后台代码 一 设计原型 模拟工具: 二 后台代码 主程序: using System.IO.Ports; using System.Net; using System.Net.Sockets; using System.Text;namespace 扫码称重上位机 {public partial class Form1 : Form{public Form1(){Initialize…

红米手机RedNot11无法使用谷歌框架,打开游戏闪退的问题,红米手机如何开启谷歌框架

红米手机RedNot11无法使用谷歌框架,打开游戏闪退的问题, 1.问题描述2.问题原因3.解决方案3.1配置谷歌框架:3.1软件优化 4.附图 1.问题描述 红米手机打开安卓APP没有广告,直接闪退,无法使用谷歌框架 异常关键词中包含&…

P1223 排队接水

题目描述 有 𝑛 个人在一个水龙头前排队接水,假如每个人接水的时间为 𝑇𝑖,请编程找出这 𝑛 个人排队的一种顺序,使得 𝑛个人的平均等待时间最小。 输入格式 第一行为一个整数 &a…