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

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

目录

  • 模式的历史
  • 设计模式是什么
  • 设计原则 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

相关文章:

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

目录 模式的历史设计模式是什么设计原则 SOLID1. 单一职责原则(Single Responsibility Principle, SRP)2. 开闭原则(Open/Closed Principle, OCP)3. 里氏替换原则(Liskov Substitution Principle, LSP)4. 接…...

【stable diffusion部署】Stable Diffusion开源本地化的文生图图生图AI

前言 主要功能 文生图、图生图、图像修复、处理、合成 所有的AI设计工具,安装包、模型和插件,都已经整理好了,👇获取~ 系统要求 windows 10、11系统,建议6G显存,NVIDIA显卡推荐12G显存,内存建…...

县城楼市踩踏式降价,或现2字头,率先回归月薪一平方的合理价格

在一二线城市都在欢呼10月份、11月份成交量回升,楼价回稳的时候,广东一些县城却先顶不住了,大举降价,显示出县城楼市房价率先回归月薪一平方的合理水平,这将对全国楼市产生巨大影响。 据了解这个县城的楼价此前较为稳定…...

计算机组成原理(七):二进制编码

二进制编码 二进制系统 二进制由两个数字 0 和 1 组成,适合数字电路中的高电平(1)和低电平(0)表示。在计算机内部,所有数据(如数字、文本、图像、声音等)最终都以二进制形式存储和…...

【GitHub分享】you-get项目

【GitHub分享】you-get 一、介绍二、安装教程三、使用教程四、配置ffmpeg五,卸载 如果大家想要更具体地操作可去开源网站查看手册,这里只是一些简单介绍,但是也够用一般,有什么问题,也可以留言。 一、介绍 you-get是一…...

论文概览 |《Sustainable Cities and Society》2024.12 Vol.116

本次给大家整理的是《Sustainable Cities and Society》杂志2024年12月第116期的论文的题目和摘要,一共包括52篇SCI论文! 论文1 Enhancing road traffic flow in sustainable cities through transformer models: Advancements and challenges 通过变压…...

解决node.js的req.body为空的问题

从昨晚一直在试,明明之前用的封装的axios发送请求给其他的后端(springboot)是可以的,但昨天用了新项目的后端(node.js)就不行。 之前用了代理,所以浏览器发送的post请求不会被拦截,…...

Mysql学习笔记之安装

“工欲善其事,必先利其器”,这篇文章我们主要介绍Msql的安装方法。 1. 通过Docker方式安装Mysql 通过dock可以很方便的安装mysql,可以通过图形化界面配置各种参数,简介明了推荐使用dock方式安装,当然也可以使用命令方…...

将PDF流使用 canvas 绘制然后转为图片展示在页面上(二)

将PDF流转为图片展示在页面上 使用 pdfjs-dist 库来渲染 PDF 页面到 canvas 上,然后将 canvas 转为图片 安装 pdfjs-dist 依赖 npm install pdfjs-dist 或者 yarn add pdfjs-dist创建一个组件来处理 PDF 流的加载和渲染 该组件中是一个包含 PDF 文件的 ArrayBuffer…...

【深度学习】 零基础介绍卷积神经网络(CNN)

零基础介绍 卷积神经网络(CNN,Convolutional Neural Network)是深度学习中的一种神经网络,特别擅长处理图像和视频等有空间结构的数据。 假设我们在做一个“照片分类”的任务,比如判断一张照片中是猫还是狗。下面用一…...

Coze概述

### Coze概述 Coze(中文名为扣子)是由字节跳动开发的一个新一代AI应用开发平台,旨在让用户轻松创建各种AI驱动的应用和聊天机器人,无论用户的编程经验如何。以下是Coze的一些关键特性和功能: #### 关键特性 - **无代…...

康佳Android面试题及参考答案(多张原理图)

JVM 内存分布和分代回收机制是什么? JVM 内存主要分为以下几个区域。 堆(Heap)是 JVM 管理的最大的一块内存区域,主要用于存放对象实例。所有线程共享堆内存,在堆中又分为年轻代(Young Generation)和老年代(Old Generation)。年轻代又分为 Eden 区和两个 Survivor 区(…...

2022 年 3 月青少年软编等考 C 语言四级真题解析

目录 T1. 拦截导弹思路分析T2. 神奇的数列思路分析T3. 硬币思路分析T4. 公共子序列思路分析T1. 拦截导弹 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统。但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的…...

关于24年408真题的疑问

45.某计算机按字节编址,采用页式虚拟存储管理方式,虚拟地址和物理地址的长度均为32位,页表项的大小为4字节,页大小为4MB。虚拟地址结构如下: 这一道题如果不细想的话,其实是可以做对的,毕竟数字…...

【容器】k8s学习笔记基础部分(三万字超详细)

概念 应用部署方式演变 在部署应用程序的方式上,主要经历了三个时代: 传统部署:互联网早期,会直接将应用程序部署在物理机上 优点:简单,不需要其它技术的参与 缺点:不能为应用程序定义资源使…...

dayjs(2kb)和momentjs(70kb)关系详述及项目中如何选择讲解

关系 API:Day.js被设计为Moment.js的极简替代品,其API和用法与Moment.js几乎完全一致。这使得开发者在两者之间进行切换时,学习成本极低。 理念: Moment.js是一个大而全的时间日期库,提供了丰富的日期时间操作方法&am…...

【Python网络爬虫笔记】11- Xpath精准定位元素

目录 一、Xpath 在 Python 网络爬虫中的作用(一)精准定位元素(二)应对动态网页(三)数据结构化提取 二、Xpath 的常用方法(一)节点选取(二)谓词筛选&#xff0…...

6.python列表

Python 列表 (List) 深度总结 文章目录 Python 列表 (List) 深度总结1. 列表的基本概念2. 访问列表中的元素3. 修改列表4. 删除列表元素5. 列表的操作符6. 列表的内置函数7. 列表的方法8. 列表的高级用法8.1 列表推导式 (List Comprehensions)8.2 列表的浅拷贝与深拷贝8.3 列表…...

Android中bindService和startService启动服务有何区别

Android中bindService和startService启动服务有何区别 bindService 和 startService 是 Android 中两种用于与 Service 交互的方式,它们的区别主要在于 生命周期管理 和 使用场景。以下是详细对比: 1. bindService方式 bindService 是一种绑定方式&am…...

超牛免费 机械臂模型、工业机器人模型下载网站集合

‌机械臂是一种高精度、多输入多输出的复杂系统,能够模仿人手的动作,按照给定程序、轨迹和要求实现自动抓取、搬运等功能‌。它通常由执行机构、驱动装置、控制系统以及传感器等组成,能够完成各种复杂的动作。‌ 机械臂在工业、医学、娱乐、…...

杀戮尖塔2绅士mod官方正版2026最新版pc免费下载(看到请立即转存 资源随时失效)手机版通用

下载链接 解压密码:www.kdacg.com 基于响应式状态机的高清动态 UI 组件设计与跨平台渲染优化实践 在当前的企业级前端与交互设计开发中,如何在高复杂度的业务逻辑下,实现高清、高性能且具备强即时反馈的多模态动态 UI 组件,一直…...

软考高项案例分析14:项目配置、变更管理

软考高项案例分析14:项目配置、变更管理 一、配置管理 1. 配置管理活动有哪些 制订配置管理计划 配置项识别 配置项控制 配置状态报告 配置审计 配置管理回顾与改进 2. 基线配置项和非基线配置项 基线配置项:包含所有的设计文档和源程序; 非基线配置项:包括项目的…...

为内部知识库问答系统集成 Taotoken 多模型增强回答多样性

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 为内部知识库问答系统集成 Taotoken 多模型增强回答多样性 在企业内部知识库中构建智能问答系统,核心目标之一是提供准…...

限时开放!ElevenLabs未公开东北话语音微调接口文档(含token绕过+方言embedding注入完整POC)

更多请点击: https://codechina.net 第一章:ElevenLabs东北话语音微调接口的发现与边界定义 ElevenLabs 官方 API 文档未显式标注“东北话”支持,但通过其语音克隆(Voice Cloning)与声音微调(Fine-tuning&…...

Redis 主从复制与哨兵机制详解:从原理到高可用实战

Redis 主从复制与哨兵机制详解:从原理到高可用实战 1. 引言 Redis 作为高性能的键值存储系统,在生产环境中常面临两大挑战:单点故障(一个节点宕机导致服务不可用)和读写压力(单节点无法承载高并发读请求&am…...

Adobe-GenP:5分钟解锁Adobe全家桶的终极方案

Adobe-GenP:5分钟解锁Adobe全家桶的终极方案 【免费下载链接】Adobe-GenP Adobe CC 2019/2020/2021/2022/2023 GenP Universal Patch 3.0 项目地址: https://gitcode.com/gh_mirrors/ad/Adobe-GenP 还在为Adobe Creative Cloud的高昂订阅费用发愁吗&#xff…...

终极指南:如何用OpenHTMLtoPDF轻松生成专业级PDF文档

终极指南:如何用OpenHTMLtoPDF轻松生成专业级PDF文档 【免费下载链接】openhtmltopdf An HTML to PDF library for the JVM. Based on Flying Saucer and Apache PDF-BOX 2. With SVG image support. Now also with accessible PDF support (WCAG, Section 508, PDF…...

程序员会被产品经理替代吗?——当AI让“全栈”成为常态,我们的价值在哪里?

程序员会被产品经理替代吗?——当AI让“全栈”成为常态,我们的价值在哪里? 最近,V2EX上一个帖子引发了激烈讨论:随着AI能力的指数级增长,一个人就能完成从前需要整个团队才能做到的全栈开发。如果产品经理借…...

告别手动撮合!这款插件让量化回测全程智能省心

当你的策略信号发出买入指令,资金是否足够?保证金怎么算?扣完手续费和印花税,账户还剩多少? 这些“交易后处理”逻辑,听起来不难,亲手写过就知道有多绕。不同券商的计费规则各异,昨仓…...

早上好呀

早上好...