常用的设计模式有哪些

设计模式是软件工程中用来解决常见设计问题的一些通用解决方案。常见的设计模式可以分为三大类:创建型模式、结构型模式和行为型模式。以下是每类设计模式的具体介绍:

创建型模式

这些模式主要用于对象创建,避免程序中的硬编码,实现对象的灵活创建。

  1. 单例模式(Singleton Pattern):确保一个类只有一个实例,并提供一个全局访问点。
  2. 工厂方法模式(Factory Method Pattern):定义一个创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。
  3. 抽象工厂模式(Abstract Factory Pattern):提供一个创建一系列相关或互相依赖对象的接口,而无需指定它们具体的类。
  4. 生成器模式(Builder Pattern):将一个复杂对象的构建过程与其表示分离,使得同样的构建过程可以创建不同的表示。
  5. 原型模式(Prototype Pattern):通过复制现有的实例来创建新的对象,而不是通过实例化类。

结构型模式

这些模式涉及对象的组合,确保系统结构的灵活和高效。

  1. 适配器模式(Adapter Pattern):将一个类的接口转换成客户希望的另一个接口,使得原本由于接口不兼容而不能一起工作的类可以一起工作。
  2. 桥接模式(Bridge Pattern):将抽象部分与它的实现部分分离,使它们都可以独立地变化。
  3. 组合模式(Composite Pattern):将对象组合成树形结构以表示“部分-整体”的层次结构,使得用户对单个对象和组合对象的使用具有一致性。
  4. 装饰者模式(Decorator Pattern):动态地给一个对象添加一些额外的职责,就增加功能来说,装饰者模式比生成子类更为灵活。
  5. 外观模式(Facade Pattern):为子系统中的一组接口提供一个一致的界面,使得子系统更容易使用。
  6. 享元模式(Flyweight Pattern):通过共享尽可能多的相同对象来节省内存。
  7. 代理模式(Proxy Pattern):为其他对象提供一种代理以控制对这个对象的访问。

行为型模式

这些模式涉及类和对象之间的职责分配,更注重对象之间的交互。

  1. 责任链模式(Chain of Responsibility Pattern):为请求创建一个接收对象的链,避免请求发送者与接收者耦合。
  2. 命令模式(Command Pattern):将请求封装成对象,使得可以用不同的请求、队列或者日志来参数化其他对象。
  3. 解释器模式(Interpreter Pattern):为语言创建解释器,定义一个语言的文法,并建立一个解释器来解释这个语言中的句子。
  4. 迭代器模式(Iterator Pattern):提供一种方法来顺序访问一个聚合对象中的各个元素,而又不暴露其内部的表示。
  5. 中介者模式(Mediator Pattern):用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散。
  6. 备忘录模式(Memento Pattern):在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。
  7. 观察者模式(Observer Pattern):定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。
  8. 状态模式(State Pattern):允许一个对象在其内部状态改变时改变它的行为,对象看起来好像修改了它的类。
  9. 策略模式(Strategy Pattern):定义一系列的算法,把它们一个个封装起来,并且使它们可互相替换。
  10. 模板方法模式(Template Method Pattern):定义一个操作中的算法的框架,而将一些步骤延迟到子类中,使得子类可以不改变算法的结构即可重新定义该算法的某些特定步骤。
  11. 访问者模式(Visitor Pattern):为一个对象结构中的各元素提供一个新的操作,定义表示一个操作作用于某对象结构中的各元素的操作。

每种模式都有其适用的场景和优缺点,选择合适的设计模式可以提高代码的可维护性、可扩展性和复用性。

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

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

相关文章

速部署 HBase 测试环境

快速部署 HBase 测试环境 第一步:下载软件,在HBase官网下载最新版, 找到 bin,点击下载,比如我这里下载的是 hbase-2.5.6-bin.tar.gz 第二步:解压软件 $ tar -zxvf hbase-2.5.6-bin.tar.gz $ cd hbase-2.…

Lora模型训练的参数-学习笔记

任何一个lora都会有三重属性,易调用性、泛化性和还原性,任何一个lora只能完美满足其中的两项; 易调用性:在已调用lora后,还需要多少提示词才能让该lora完全生效; 泛化性:能不能还原lora训练素…

杜甫很 忙

我 我希望大家别再乱搞了

Windows终端远程登陆Linux服务器(SSH+VScode)

W i n d o w s 终端远程登陆 L i n u x 服务器( S S H V S c o d e ) \huge{Windows终端远程登陆Linux服务器(SSHVScode)} Windows终端远程登陆Linux服务器(SSHVScode) 文章目录 写在前面通过SSH远程连接L…

golang程序性能提升改进篇之文件的读写---第一篇

背景:接手的项目是golang开发的(本人初次接触golang)经常出现oom。这个程序是计算和io密集型,调用流量属于明显有波峰波谷,但是因为各种原因,当前无法快速通过serverless或者动态在高峰时段调整资源&#x…

JS之数组中的reduce方法

文章目录 基本语法:callbackFn 的参数:例子1. 数组求和2. 数组求积3. 扁平化数组4. 数组元素计数5. 使用对象解构和展开运算符合并数组中的对象6. 求最大值和最小值 函数组合异步操作中的 reduce总结 reduce 是 JavaScript 中 Array 对象的一个方法,非常…

MySQL InnoDB【事务模型】之【事务隔离级别】 全攻略

快速导航 事务隔离级别可重复读(REPEATABLE READ)读提交内容(READ COMMITTED)读未提交内容(READ UNCOMMITTED)可串行化(SERIALIZABLE) 事务隔离级别 事务隔离是数据库处理的基础之一…

「邀您参会」首个中国可观测日即将盛大开幕

在云计算领域不断探索与创新的背景下,亚马逊云科技与观测云今日宣布,将联合举办中国可观测日(Observability Day)活动,旨在深化双方合作,共同推动中国可观测性的发展。 中国站首站,选址上海&am…

软件测试——非功能测试

工作职责: 1.负责产品系统测试,包括功能测试、性能测试、稳定性测试、用户场景测试、可靠性测试等。 2.负责测试相关文档的编写,包括测试计划、测试用例、测试报告等。 3.负责自动化测试框架、用例的维护。 岗位要求: 1.熟练…

使用html2canvas实现图片或者dom元素的样式展示

html或者.vue.tsx模板 <div class"tan1" id"tan1"><div class"jiang" id"jiangImg1" style"margin: 1rem auto 0;width: 75%;height: 10rem;position: relative;background-color: transparent;"><img id&q…

Laravel数据库的魔法棒:深入探索数据库迁移(Migrations)

Laravel数据库的魔法棒&#xff1a;深入探索数据库迁移&#xff08;Migrations&#xff09; 在Laravel的世界中&#xff0c;数据库迁移&#xff08;Migrations&#xff09;是一种强大的工具&#xff0c;它允许开发者以版本控制的方式管理数据库结构的变化。通过迁移&#xff0…

中级java每日一道面试题-2024年7月17日

面试官: 操作字符串都有哪些类?它们之间有什么区别? 我回答: String 描述&#xff1a;String是最基本的字符串类&#xff0c;用于表示不可变的字符序列。一旦创建了一个String对象&#xff0c;其内容就不能被改变。特性&#xff1a; 不可变性&#xff08;Immutability&#…

【启明智显方案分享】工业级HMI芯片MODEL3\MODEL4应用于电梯系统多媒体

一、方案概述 本方案采用工业级HMI芯片MODEL3或MODEL4作为核心处理器&#xff0c;结合7寸以上高清显示屏&#xff0c;为电梯系统提供多媒体解决方案。该方案不仅能够显示日期、时间、楼层信息等基础信息&#xff0c;还能播放广告、通知、视频等多媒体内容&#xff0c;增强电梯…

HTTPS请求头缺少HttpOnly和Secure属性解决方案

问题描述&#xff1a; 建立Filter拦截器类 package com.ruoyi.framework.security.filter;import com.ruoyi.common.core.domain.model.LoginUser; import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.framework.…

友讯随身WiFi和格行随身WiFi真实测评!彩屏款随身WiFi谁更胜一筹?随身WiFi哪个最好用?随身WiFi哪个口碑最好?哪个性价比更高?

在众多随身WiFi品牌中&#xff0c;友讯&#xff08;D-Link&#xff09;与格行&#xff08;Gexing&#xff09;都是彩屏款随身WiFi因其相似的设计和各自独特的品牌背景&#xff0c;常常让消费者难以抉择。今天&#xff0c;我们就来一场真实测评&#xff0c;深入剖析这两款彩屏随…

求解答word图标变白

把WPS卸载了之后就变成白色了&#xff0c;然后在注册表中把word的地址改成office word的地址之后图标变成这样了&#xff0c;怎么办

Talk|清华大学袁天远:PreSight - 利用NeRF先验帮助自动驾驶场景在线感知

本期为TechBeat人工智能社区第605期线上Talk。 北京时间7月3日(周三)20:00&#xff0c;清华大学博士生—袁天远的Talk已经准时在TechBeat人工智能社区开播&#xff01; 他与大家分享的主题是: “PreSight - 利用NeRF先验帮助自动驾驶场景在线感知”&#xff0c;他向大家介绍了新…

【XSS】

文章目录 0x01 简介0x02 XSS Payload用法XSS攻击平台及调试JavaScript 0x03 XSS构造技巧XSS漏洞防御策略 跨站脚本攻击&#xff0c;Cross Site Script。&#xff08;重点在于脚本script&#xff09; 分类 反射型、存储型DOM型 漏洞原理&#xff1a;通过插入script篡改“HTML”…

Kotlin Flow:掌握基本,征服应用,避开开发陷阱!

文章目录 1. 前言2. Kotlin Flow基本概念2.1 什么是数据流&#xff1f;2.2 Kotlin Flow是什么&#xff1f;2.3 有了LiveData和协程&#xff0c;为啥还需要Kotlin Flow&#xff1f;2.4 相比RxJava&#xff0c;Kotlin Flow有什么优势? 3. 基本使用3.1 Flow的创建和消费3.2 操作符…

AI 生成时代,现有编程语言还够用吗?

7月14日下午&#xff0c;知乎「AI 先行者沙龙」在深圳南山举行&#xff0c;本次沙龙以 “探航” 为主题&#xff0c;粤港澳大湾区数字经济研究院基础软件中心首席科学家、MoonBit 平台负责人张宏波受邀发表主旨演讲——《AI 生成时代&#xff0c;现有编程语言还够用吗&#xff…