GoF23种设计模式 简介

news2025/1/7 9:37:05

文章目录

  • 面向对象(OO)设计原则(7)
      • 单一职责原则
      • 开闭原则
      • 里氏代换原则
      • 依赖倒转原则
      • 接口隔离原则
      • 合成复用原则
      • 迪米特法则
  • 创建型模式 (5)
      • 工厂方法模式 (类模式,其余都是对象模式)
      • 抽象工厂模式
      • 建造者模式
      • 原型模式
      • 单例模式
  • 结构型模式 (7)
      • 适配器模式
      • 桥接模式
      • 组合模式
      • 装饰模式
      • 外观模式
      • 享元模式
      • 代理模式
        • 装饰模式(Decorator) 与 代理模式(Proxy) 的根本区别
  • 行为型模式 (11)
      • 解释器模式 (类模式)
      • 模板方法模式(类模式)
      • 职责链模式
      • 命令模式
      • 迭代器模式
      • 中介者模式
      • 备忘录模式
      • 观察者模式
      • 状态模式
      • 策略模式
      • 访问者模式

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

面向对象(OO)设计原则(7)

在这里插入图片描述
可维护性(Maintainability) ,可复用性(Reusability)
在这里插入图片描述

单一职责原则

一个对象应该只包含单一的职责,并且该职责被完整地封装在一个类中

在这里插入图片描述
在这里插入图片描述

开闭原则

软件实体应当对扩展开放,对修改关闭

在这里插入图片描述
在这里插入图片描述

里氏代换原则

所有引用基类的地方必须能透明地使用其子类的对象

在软件中将一个基类对象替换成它的子类对象,程序将不会产生任何错误和异常:

在这里插入图片描述

继承重写的类应可使用:

在这里插入图片描述
cipher 密码

依赖倒转原则

高层模块不应该依赖低层模块,它们都应该依赖抽象。抽象不应该依赖于细节,细节应该依赖于抽象

要针对接口编程

在这里插入图片描述
增加一个新的类型时需要修改源代码了,违背了开闭原则。

在这里插入图片描述

MainClass 依赖 抽象。

接口隔离原则

客户端不应该依赖那些它不需要的接口

在这里插入图片描述

在这里插入图片描述
这里三个Service可能差异特别大,比如openGL的片元着色器fshader,可能有的模型网格就没有纹理,有的不需要影子,这些网格就可以单独用一个着色器。🤓

合成复用原则

优先使用对象组合,而不是继承来达到复用的目的

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
自己留Operator

迪米特法则

应该尽量减少对象之间的交互

每一个软件单位对其他的单位都只有最少的知识,而且局限于那些与本单位密切相关的软件单位

在这里插入图片描述
在这里插入图片描述

创建型模式 (5)

工厂方法模式 (类模式,其余都是对象模式)

有生产方法接口,具体内容由继承后重写决定。

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

当涉及到多个工厂和多个商品时,工厂方法模式通常会发展为抽象工厂模式。

抽象工厂模式

【不同厂子与相同产品】调用同样的类的方法<多态>
在这里插入图片描述

在这里插入图片描述

建造者模式

【车与造车】

产品本身与产品的创建过程解耦

在这里插入图片描述
在这里插入图片描述

原型模式

【拷贝用的函数】

复制 (深/浅)

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

单例模式

确保一个类只有一个实例

在这里插入图片描述


结构型模式 (7)

结构型模式(Structural Pattern)关注如何将现有类或对象组织在一起形成更加强大的结构。

类结构型模式 关心类的组合 【继承关系和实现关系】

对象结构型模式 关心类与对象的组合

适配器模式

【接口转换】

(包装器(Wrapper)模式)

在这里插入图片描述
在这里插入图片描述

桥接模式

【抽象与实现解耦】

在这里插入图片描述
形状与颜色两个维度。

在这里插入图片描述
在这里插入图片描述

组合模式

【树形结构】

在这里插入图片描述

在这里插入图片描述
(多叶子)

装饰模式

【动态增加职责】(比子类灵活)
在这里插入图片描述
在这里插入图片描述
拿到成员,可以调用他的所有方法;若有get方法,就能获取成员。

外观模式

【一组接口放一起调用】

<迪米特法则> 引入一个新的外观角色来降低原有系统的复杂

在这里插入图片描述

在这里插入图片描述
facade 外观

享元模式

【共享技术】
在这里插入图片描述
在这里插入图片描述

HashMap可作享元池,存在直接取,不存在再new.

代理模式

【由代理对象来控制对原对象的访问】

在这里插入图片描述

在这里插入图片描述
extends 扩展

同装饰模式一样,也是加一层。

不过装饰模式想增强功能,而这里是想加条件,而不是改变目标对象的行为。

装饰模式(Decorator) 与 代理模式(Proxy) 的根本区别

装饰模式的主要目的是增强或扩展对象的功能,动态地为对象增加额外的功能或行为。
代理模式的主要目的是控制对目标对象的访问,通常用于延迟加载、安全控制等,而不是改变目标对象的行为。


行为型模式 (11)

行为型模式(Behavioral Pattern) 关注系统中对象之间的交互。

类行为型模式 通过多态等方式来分配父类与子类的职责

对象行为型模式 通过对象关联等方式来分配两个或多个类的职责

解释器模式 (类模式)

解释器用定义的表示解释句子。

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
node 节点
在这里插入图片描述

模板方法模式(类模式)

基于继承的代码复用技术
在这里插入图片描述
在这里插入图片描述
抽象方法(Abstract Method)
具体方法(Concrete Method)
钩子方法(Hook Method) <插入点>挂接自定义代码
在这里插入图片描述

职责链模式

接收对象连接成一条链,沿着传递,直到有一个对象能够处理它为止。

在这里插入图片描述
在这里插入图片描述
successor 继承人。类成员维持了对下家的引用

命令模式

请求封装为对象
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

迭代器模式

又名游标(Cursor)模式

提供一种方法顺序访问一个聚合对象中的各个元素,且不用暴露该对象的内部表示。

在这里插入图片描述
在这里插入图片描述
由迭代器来提供遍历聚合对象内部数据的行为,简化聚合对象的设计,更符合单一职责原则

在这里插入图片描述

中介者模式

封装多对多交互。可以使对象之间的关系数量急剧减少。

QQ群
在这里插入图片描述
用户只需要将信息或文件发送到群中或上传为群共享文件即可,群的作用就是将发送者所发送的信息和文件转发给每一个接收者,将极大地减少系统中用户之间的两两通信。

在这里插入图片描述
colleague 同事

备忘录模式

快照。

在这里插入图片描述
在这里插入图片描述
originator 创始人
memento 纪念品
caretaker 管理员

观察者模式

一对多,状态改变通知。

在这里插入图片描述

在这里插入图片描述

假设猫是老鼠和狗的观察目标,老鼠和狗是观察者,猫叫老鼠跑,狗也跟着叫,使用观察者模式描述该过程:
在这里插入图片描述

状态模式

状态改变时改变行为。
在这里插入图片描述
在这里插入图片描述

策略模式

算法封装,可替换
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

访问者模式

在不改变各元素的类的前提下定义新操作。

在这里插入图片描述
在这里插入图片描述

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

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

相关文章

文献阅读 | B. S. Carmo 2010

目录 一、文献名称二、原文地址三、ABSTRACT研究方法主要发现结论 四、INTRODUCTION研究背景涡旋脱落与脱落模式脱落模式分类SG&#xff08;间隙对称脱落&#xff09;AG&#xff08;间隙交替脱落&#xff09;WG&#xff08;间隙尾流脱落&#xff09; 拖力反转 相关研究以前的研…

机器学习之过采样和下采样调整不均衡样本的逻辑回归模型

过采样和下采样调整不均衡样本的逻辑回归模型 目录 过采样和下采样调整不均衡样本的逻辑回归模型1 过采样1.1 样本不均衡1.2 概念1.3 图片理解1.4 SMOTE算法1.5 算法导入1.6 函数及格式1.7 样本类别可视化理解 2 下采样2.1 概念2.2 图片理解2.3 数据处理理解2.4 样本类别可视化…

unity学习7:unity的3D项目的基本操作: 坐标系

目录 学习参考 1 unity的坐标系 1.1 左手坐标系 1.2 左手坐标系和右手坐标系的区别 1.3 坐标系的原点(0,0,0) 2 坐标系下的具体xyz坐标 2.1 position这里的具体xyz坐标值 2.2 父坐标 2.3 世界坐标和相对坐标 2.3.1 世界坐标 2.3.2 相对坐标 2.4 父物体&#xff0c;…

【读书笔记·VLSI电路设计方法解密】问题36:一个好的设计流程有哪些特点

由于IC实现与不断演进的技术节点密切相关,且各种新问题迅速涌现,一个优秀的设计流程必须具备灵活性,以应对这些新挑战,而无需进行大规模调整。 与此同时,为了克服当今SoC实现领域中出现的众多问题,整个EDA行业正在高速运转。新工具正在加速涌现;因此,一个优秀的设计流…

【读书笔记·VLSI电路设计方法解密】问题35:ASIC设计流程的两个主要方面是什么

毫无疑问,ASIC设计流程是一个复杂的系统,包含了许多商业CAD工具以及许多内部开发的工具或脚本。然而,无论流程中集成了多少工具或脚本,ASIC设计流程的核心目标始终可以归结为两个关键点:创建和检查。 创建过程指的是生成硬件的活动,例如RTL编码、逻辑综合以及布局布线。…

Linux上安装配置单节点zookeeper

直接先去官网下载安装包&#xff0c; https://downloads.apache.org/zookeeper/ 选择合适的版本&#xff0c;然后上传至服务器 解压&#xff1a; tar -zxvf apache-zookeeper-3.9.3-bin.tar.gz创建data和logs目录 mkdir data mkdir logs配置环境变量&#xff1a; vim /etc/p…

ModuleNotFoundError: No module named XXX

我们在安装了某个包之后&#xff0c;还是提示找不到包 方法一&#xff1a; python -m pip install 包名 -i https://pypi.tuna.tsinghua.edu.cn/simple 方法二&#xff1a; conda install 包名 如果还是找不到包&#xff1a; 请检查环境&#xff1a;

(leetcode算法题)384. 打乱数组 398. 随机数索引

问题转化&#xff1a; 题目要求将nums中的数字出现的次序随机打乱 转化成&#xff1a;对于 0 号位置来说&#xff0c;nums[i], ..., nums[n - 1] 可以等概率的出现 ... && ... && 对于 n - 1号位置来说&#xff0c;nums[i], ..., nums[n - 1] 可以等概率的出…

从零开始开发纯血鸿蒙应用之实现起始页

从零开始开发纯血鸿蒙应用 一、前言二、主要页面三、应用起始页四、MainPageContent 实现1、一级结构2、二级结构2.1、EmptyContent2.2、FileListContent2.2.1、ViewAction&#xff1a;2.2.2、EditAction2.2.3、DeleteAction2.2.4、ShareAction 五、载入起始页的时机五、总结 一…

Linux(Ubuntu24.04)源码编译安装VTK7.1.1记录

VTK&#xff08;Visualization Toolkit&#xff09;是一个开源的3D可视化开发工具包&#xff0c;用于开发可视化和图形处理应用程序。VTK提供了一系列的算法和工具&#xff0c;用于创建、渲染和处理复杂的3D图形和数据。VTK由C编写&#xff0c;并提供了Python、Java和Tcl等语言…

三、GIT与Github推送(上传)和克隆(下载)

GIT与Github推送&#xff08;上传&#xff09;和克隆&#xff08;下载&#xff09; 一、配置好SSH二、在Github创建仓库三、git克隆&#xff08;下载&#xff09;文件四、git推送&#xff08;上传&#xff09;文件到远程仓库 一、配置好SSH Git与Github上传和下载时需要使用到…

SpringCloudAlibaba实战入门之Sentinel服务降级和服务熔断(十五)

一、Sentinel概述 1、Sentinel是什么 随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel 以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。 一句话概括:sentinel即Hystrix的替代品,官网: https://sentinelguard.io/zh…

24年无人机行业资讯 | 12.23-12.29

24年无人机行业资讯 | 12.23-12.29 1、 国家发改委新设低空经济司&#xff0c;助力低空经济规范发展2、商务部支持无人机民用国际贸易&#xff0c;强调出口管制与安全并重3、滨州高新区首架无人机成功下线4、 2025第九届世界无人机大会筹备推进会顺利召开5、2024年世界无人机竞…

前端实现大文件上传(文件分片、文件hash、并发上传、断点续传、进度监控和错误处理,含nodejs)

大文件分片上传是前端一种常见的技术&#xff0c;用于提高大文件上传的效率和可靠性。主要原理和步骤如下 文件分片 确定分片大小&#xff1a;确定合适的分片大小。通常分片大小在 1MB 到 5MB 之间使用 Blob.slice 方法&#xff1a;将文件分割成多个分片。每个分片可以使用 Bl…

源代码编译安装X11及相关库、vim,配置vim(1)

一、目录结构 如下。 所有X11及相关库装到mybuild&#xff0c;源代码下载到src下&#xff0c;解压&#xff0c;进入&#xff0c;编译安装。编译时指定--prefix到相同的目录&#xff0c;即上图中mybuild。 ./configure --prefixpwd/../../mybuild [CFLAGS"-I/path/to/X11…

bytetrack 解决跟踪后框晃动的问题

使用距离最近的匹配的检测框 替代 bytetrack返回的跟踪框 作为最终的返回结果 完整byte_tracker.py代码为&#xff1a; import numpy as np from collections import deque import os import os.path as osp import copy import torch import torch.nn.functional as Ffrom …

如何使用OBS Studio录制屏幕?

可以进入官网或github进行下载&#xff1a; https://obsproject.com/download 安装包解压后进入bin 进入64-bit 选择obs 64 进入OBS Studio后在来源内右键&#xff0c;选择添加 选择添加显示器采集即可录取整个屏幕&#xff0c;窗口采集可选择窗口进行录制 选择对应显示器即配置…

ArcGIS Server 10.2授权文件过期处理

新的一年&#xff0c;arcgis server授权过期了&#xff0c;服务发不不了。查看ecp授权文件&#xff0c;原来的授权日期就到2024.12.31日。好吧&#xff0c;这里直接给出处理方法。 ArcGIS 10.2安装时&#xff0c;有的破解文件中会有含一个这样的注册程序&#xff0c;没有的话&…

循环冗余校验CRC的介绍

一、简介 循环冗余校验CRC&#xff08;Cyclic Redundancy Check&#xff09;是数据通信领域中最常用的一种差错校验码。该校验方法中&#xff0c;使用多项式出发&#xff08;模2除法&#xff09;运算后的余数为校验字段。CRC只能实现检错&#xff0c;不能实现纠错&#xff0c;使…

消息中间件类型都有哪些

在消息中间件的专业术语中&#xff0c;我们可以根据其特性和使用场景将其划分为几种主要的类型。这些类型不仅反映了它们各自的技术特点&#xff0c;还决定了它们在不同应用场景下的适用性。 1. 点对点&#xff08;Point-to-Point&#xff09;消息中间件&#xff1a; • 这类中…