【速览】设计模式(更新中)

目录

  • 模式的历史
  • 设计模式是什么
  • 设计原则 SOLID
    • 1. 单一职责原则(Single Responsibility Principle, SRP)
    • 2. 开闭原则(Open/Closed Principle, OCP)
    • 3. 里氏替换原则(Liskov Substitution Principle, LSP)
    • 4. 接口隔离原则(Interface Segregation Principle, ISP)
    • 5. 依赖倒置原则(Dependency Inversion Principle, DIP)
    • 6. 迪米特法则(Law of Demeter, LoD),也称为最少知识原则(Least Knowledge Principle)
  • 设计模式分类
    • 创建型模式(Creational Patterns)
    • 结构型模式(Structural Patterns)
    • 行为型模式(Behavioral Patterns)

模式的历史

模式的概念是由克里斯托佛·亚历山大在其著作 《建筑模式语言》 中首次提出的。 本书介绍了城市设计的 “语言”, 而此类 “语言” 的基本单元就是模式。 模式中可能会包含对窗户应该在多高、 一座建筑应该有多少层以及一片街区应该有多大面积的植被等信息的描述。


埃里希·伽玛、 约翰·弗利赛德斯、 拉尔夫·约翰逊和理查德·赫尔姆这四位作者接受了模式的概念。 1994 年, 他们出版了 《设计模式: 可复用面向对象软件的基础》 一书, 将设计模式的概念应用到程序开发领域中。 该书提供了 23 个模式来解决面向对象程序设计中的各种问题, 很快便成为了畅销书。 由于书名太长, 人们将其简称为 “四人组 (Gang of Four, GoF) 的书”, 并且很快进一步简化为 “GoF 的书”。

设计模式是什么

设计模式(Design Patterns)是软件工程领域中的一组通用解决方案,用于解决在特定情境下反复出现的设计问题。它们提供了一种经过验证的结构化方法来组织代码,使得程序更易于理解、维护和扩展。

模式通常会包括以下部分:

  • 意图部分简单描述问题和解决方案。
  • 动机部分将进一步解释问题并说明模式会如何提供解决方案。
  • 结构部分展示模式的每个部分和它们之间的关系。
  • 在不同语言中的实现提供流行编程语言的代码, 让读者更好地理解模式背后的思想。

设计原则 SOLID

1. 单一职责原则(Single Responsibility Principle, SRP)

定义:一个类应该只有一个引起它变化的原因,即一个类只负责一项功能。
目的:确保类的职责单一化,减少耦合度,使得代码更易于理解、测试和维护。

2. 开闭原则(Open/Closed Principle, OCP)

定义:软件实体(类、模块、函数等)应该对扩展开放,对修改关闭。
目的:通过增加新功能来扩展现有代码的行为,而不是直接修改已有代码,从而降低引入错误的风险。

3. 里氏替换原则(Liskov Substitution Principle, LSP)

定义:子类型必须能够替换它们的基类型而不影响程序的正确性。
目的:保证继承关系中的多态性和一致性,确保子类可以无缝地替代父类使用。

4. 接口隔离原则(Interface Segregation Principle, ISP)

定义:客户端不应该被迫依赖于它们不使用的接口;换句话说,不要将许多方法捆绑到一个大而全的接口中。
目的:创建更小、更具体的接口,让实现类只关注必要的功能,避免不必要的依赖。

5. 依赖倒置原则(Dependency Inversion Principle, DIP)

定义:
高层模块不应该依赖低层模块,两者都应该依赖其抽象。
抽象不应该依赖细节,细节应该依赖抽象。
目的:解耦高层和低层模块之间的直接依赖,使系统更加灵活且易于扩展。

6. 迪米特法则(Law of Demeter, LoD),也称为最少知识原则(Least Knowledge Principle)

定义:一个对象应当对其他对象有尽可能少的了解;只与紧密相关的对象交流。
目的:限制对象之间的交互,减少耦合度,提高系统的稳定性和可维护性。

设计模式分类

设计模式分为三大类:创建型模式(Creational Patterns)、结构型模式(Structural Patterns)和行为型模式(Behavioral Patterns)。

创建型模式(Creational Patterns)

这类模式提供创建对象的机制, 能够提升已有代码的灵活性和可复用性

工厂方法模式(Factory Method)
抽象工厂模式(Abstract Factory)
生成器模式(Builder)
原型模式(Prototype)
单例模式(Singleton)

结构型模式(Structural Patterns)

这类模式介绍如何将对象和类组装成较大的结构, 并同时保持结构的灵活和高效

适配器模式(Adapter)
桥接模式(Bridge)
组合模式(Builder)
装饰模式(Prototype)
外观模式(Singleton)
享元模式(Prototype)
代理模式(Singleton)

行为型模式(Behavioral Patterns)

这类模式负责对象间的高效沟通和职责委派

责任链模式(Factory Method)
命令模式(Abstract Factory)
迭代器模式(Builder)
中介者模式(Prototype)
备忘录模式(Singleton)
观察者模式(Singleton)
状态模式(Singleton)
策略模式(Singleton)
模板模式(Singleton)
访问者模式(Singleton)

参考:
https://refactoringguru.cn/design-patterns

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

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

相关文章

MVC基础——市场管理系统(四)

文章目录 项目地址六、EF CORE6.1 配置ef core环境6.2 code first6.2.1 创建Database context1. 添加navigation property2. 添加MarketContext上下文七、Authentication7.1 添加Identity7.2 Run DB migration for Identity7.3 使用Identity7.3.1 设置认证中间件7.3.2 设置权限…

前端编辑器JSON HTML等,vue2-ace-editor,vue3-ace-editor

与框架无关 vue2-ace-editor有问题&#xff0c;ace拿不到&#xff08;brace&#xff09; 一些组件都是基于ace-builds或者brace包装的 不如直接用下面的&#xff0c;不如直接使用下面的 <template><div ref"editor" class"json-editor"><…

Oracle 与 达梦 数据库 对比

当尝试安装了达梦数据库后&#xff0c;发现达梦真的和Oracle数据库太像了&#xff0c;甚至很多语法都相同。 比如&#xff1a;Oracle登录数据库采用sqlplus&#xff0c;达梦采用disql。 比如查看数据视图&#xff1a;达梦和Oracle都有 v$instance、v$database、dba_users等&a…

【docker】12. Docker Volume(存储卷)

什么是存储卷? 存储卷就是将宿主机的本地文件系统中存在的某个目录直接与容器内部的文件系统上的某一目录建立绑定关系。这就意味着&#xff0c;当我们在容器中的这个目录下写入数据时&#xff0c;容器会将其内容直接写入到宿主机上与此容器建立了绑定关系的目录。 在宿主机上…

汽车总线协议分析-CAN总线

随着汽车工业的发展&#xff0c;汽车各系统的控制逐步向自动化和智能化转变&#xff0c;汽车电气系统变得日益复杂。许多车辆设计使用CAN、CAN-FD、LIN、FlexRay或SENT在电子控制单元(ECU)之间以及ECU与传感器&#xff0c;执行器和显示器之间进行通信。这些ECU之间的通信允许车…

前端性能优化(理念篇)

前端性能优化&#xff08;理念篇&#xff09; 前言 其实前端性能优化&#xff0c;按照我的理解&#xff0c;首先你公司的硬件条件跟其它资源跟的上&#xff0c;比如服务器资源&#xff0c;宽带怎么样&#xff0c;还有后端接口响应如何&#xff0c;这些资源都具备后&#xff0…

IIS部署程序https是访问出现403或ERR_HTTP2_PROTOCOL_ERROR

一、说明 在windows server 2016中的IIS程序池里部署一套系统&#xff0c;通过https访问站点&#xff0c;同时考虑到安全问题以及防攻击等行为&#xff0c;就用上了WAF云盾功能&#xff0c;能有效的抵挡部分攻击&#xff0c;加强网站的安全性和健壮性。 应用系统一直能够正常…

【深度学习】热力图绘制

热力图&#xff08;Heatmap&#xff09;是一种数据可视化方法&#xff0c;通过颜色来表示数据矩阵中的数值大小&#xff0c;以便更直观地展示数据的分布和模式。热力图在许多领域中都有应用&#xff0c;尤其在统计分析、机器学习、数据挖掘等领域&#xff0c;能够帮助我们快速识…

3.6 IP 数据报的发送与转发

欢迎大家订阅【计算机网络】学习专栏&#xff0c;开启你的计算机网络学习之旅&#xff01; 文章目录 前言1 主机发送 IP 数据报2 直接交付与间接交付3 路由器转发 IP 数据报4 习题分析 前言 在计算机网络中&#xff0c;数据传输的核心工作之一是通过 IP 协议将数据从源主机传递…

PH热榜 | 2024-12-13

1. AI Santa by Tavus 标语&#xff1a;随时随地&#xff0c;视频连线圣诞老人&#xff01; 介绍&#xff1a;准备好迎接AI圣诞老人了吗&#xff1f;塔武斯公司推出的这款神奇的节日体验&#xff0c;能让你实时用30多种语言与圣诞老人对话&#xff0c;看看自己今年是乖孩子还…

双击 Origin 文件后打开软件只有空白没有任何窗口、或者打开后加载失败解决办法

这其实是因为你的文件并没有在 Origin 中打开&#xff0c;可以在标题栏确认 如果这里显示为 UNTITLED&#xff0c;就说明文件还没有在 Origin 中打开。如果你遇到此类问题&#xff0c;我们建议尝试以下方法。 方法 1 设 Origin 为打开 .opj/opju 文件时的默认应用程序 右键单…

【电子通识】电流倒灌为什么需要注意?

电流倒灌是一个很常见的问题,以“IO电流倒灌”为关键词在百度上进行搜索,可以找到很多相关案例。 电流倒灌问题在5V电平的单片机时代几乎不会发生,主要是因为5V单片的IO耐压值高,单片机内部结构对IO保护设计很好。 到了3.3V单片机时代,这类问题有一定的偶发性,但…

奇怪的知识又增加了:ESP32下的Lisp编程=>ULisp--Lisp for microcontrollers

ESP32下有MicroPython&#xff0c;那么我就在想&#xff0c;有Lisp语言支持吗&#xff1f;答案是果然有&#xff01;有ULisp&#xff0c;专门为MCU设计的Lisp&#xff01; 网址&#xff1a;uLisp - Lisp for microcontrollers 介绍&#xff1a;用于微控制器的 Lisp 适用于 Ar…

【竞技宝】LOL:JDG官宣yagao离队

北京时间2024年12月13日,在英雄联盟S14全球总决赛结束之后,各大赛区都已经进入了休赛期,目前休赛期也快进入尾声,LPL大部分队伍都开始陆续官宣转会期的动向,其中JDG就在近期正式官宣中单选手yagao离队,而后者大概率将直接选择退役。 近日,JDG战队在官方微博上连续发布阵容变动消…

得物App奢侈品鉴别能力再获A级资质认证

11月20日&#xff0c;在中国出入境检验检疫协会举办的“2024高端消费品检验鉴定与市场可持续发展大会”上传出消息&#xff0c;得物App因“先鉴别、后发货”保障正品的突出表现以及较高的消费者认可度&#xff0c;被中国海关科学技术研究中心授予“奢侈品鉴别&#xff08;箱包类…

使用BMFont创建适用于Unity的艺术字

最近经常使用艺术字&#xff0c;虽然之前的工作经验我知道只需要修什么哪些就可以弄好艺术字的创建和间隔&#xff0c;所以打算做个总结&#xff0c;接下来分为以下几步&#xff08;其中会有补充&#xff0c;最后会有如何解决unity艺术字的字距问题&#xff09; 第1步 下载BMF…

websocket_asyncio

WebSocket 和 asyncio 指南 简介 本指南涵盖了使用 Python 中的 websockets 库进行 WebSocket 编程的基础知识&#xff0c;以及 asyncio 在异步非阻塞 I/O 中的作用。它提供了构建高效 WebSocket 服务端和客户端的知识&#xff0c;以及 asyncio 的特性和优势。 1. 什么是 WebS…

数据结构_树表的查找

平衡调整方法 四种类型的调整 LL型调整 RR型调整 LR型调整 RL型调整 // 以p为根的二叉排序树作右旋处理(LL void BST::rRotate(BiNode*& p) {BiNode* k p->lChild;p->lChild k->rChild;k->rChild p;p k; }// 以p为根的二叉排序树作左旋处理(RR void BST:…

51c~Pytorch~合集2

我自己的原文哦~ https://blog.51cto.com/whaosoft/11878447 一、PyTorch与torch-xla的桥接 文章从XLATensor开始的溯源、注册PyTorch库实现、从PyTorch调用到torch_xla三个方面来介绍PyTorch与torch-xla的桥接 XLA (Accelerated Linear Algebra)是一个开源的机器学习编…

TMS320C55x DSP芯片结构和CPU外围电路

第2章 DSP芯片结构和CPU外围电路 文章目录 第2章 DSP芯片结构和CPU外围电路TMS320C55x处理器的特点TMS320c55x CPU单元指令缓冲(Instruction Buffer Unit) I单元程序流程(Program Flow Unit) P单元地址数据(Address-data Flow Unit) A单元数据计算(Data Computation Unit) D单元…