✅ 1. 单例模式(Singleton)

  • 定义:确保类只有一个实例,并提供全局访问点。
  • 优点:节省资源、控制访问。
  • 场景:数据库连接池、日志管理器、配置中心。
  • 代码要点
    • 构造方法私有
    • 静态变量保存唯一实例
    • 公共静态方法 getInstance() 获取实例

✅ 2. 工厂模式(Factory)

  • 定义:将对象创建逻辑封装,客户端通过工厂获取对象。
  • 分类:简单工厂、工厂方法、抽象工厂。
  • 优点:解耦、扩展性强。
  • 场景:对象创建复杂、需解耦创建与使用。
  • 代码要点
    • 产品接口 + 具体产品类
    • 工厂类根据参数返回不同产品实例

✅ 3. 观察者模式(Observer)

  • 定义:一对多依赖关系,主题状态变化自动通知所有观察者。
  • 优点:松耦合、广播通信。
  • 场景:事件系统、消息推送、发布订阅模型。
  • 代码要点
    • Subject 管理观察者列表
    • Observer 接口定义更新方法
    • 状态变化时调用 notifyObservers()

✅ 4. 策略模式(Strategy)

  • 定义:封装一系列算法,使它们可互相替换。
  • 优点:避免 if-else、提高扩展性。
  • 场景:排序策略、支付方式、资源调度。
  • 代码要点
    • 策略接口定义算法行为
    • 上下文类持有策略对象
    • 运行时动态切换策略

✅ 5. 适配器模式(Adapter)

  • 定义:将一个接口转换为另一个接口,使不兼容类协同工作。
  • 优点:复用旧代码、符合开闭原则。
  • 场景:集成第三方库、接口不兼容。
  • 代码要点
    • 目标接口 + 被适配类
    • 适配器类实现目标接口并持有被适配对象

✅ 6. 装饰器模式(Decorator)

  • 定义:动态地为对象添加额外功能,不改变原结构。
  • 优点:比继承更灵活、支持组合扩展。
  • 场景:日志包装、缓存包装、权限控制。
  • 代码要点
    • 组件接口 + 具体组件
    • 装饰器抽象类持有组件对象
    • 具体装饰器扩展功能

✅ 7. 代理模式(Proxy)

  • 定义:为其他对象提供代理以控制访问。
  • 优点:延迟加载、权限控制、日志记录。
  • 场景:权限校验、远程调用、缓存代理。
  • 代码要点
    • 接口定义行为
    • 真实类实现接口
    • 代理类实现接口并控制对真实对象的访问

✅ 8. 外观模式(Facade)

  • 定义:为复杂子系统提供统一的高层接口。
  • 优点:简化客户端调用、降低耦合。
  • 场景:封装复杂API、整合多个服务调用。
  • 代码要点
    • 多个子系统类
    • 外观类封装子系统调用流程
    • 客户端只与外观类交互

✅ 9. 模板方法模式(Template Method)

  • 定义:定义算法骨架,将具体步骤延迟到子类实现。
  • 优点:复用流程、扩展灵活。
  • 场景:支付流程、GUI事件处理、产品组装线。
  • 代码要点
    • 抽象类定义模板方法(final)
    • 子类实现可变步骤
    • 钩子方法可选覆盖

🔍 总结速查表

模式名称关键词典型场景
单例唯一实例配置中心、日志器
工厂对象创建解耦创建复杂对象、依赖注入
观察者一对多通知消息推送、事件系统
策略动态切换算法排序、支付、调度
适配器接口转换第三方库集成
装饰器动态增强功能日志、缓存、权限包装
代理控制访问权限代理、延迟加载
外观简化复杂接口封装子系统、统一API入口
模板方法流程复用支付流程、GUI事件、组装线

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

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

相关文章

单链表的手动实现+相关OJ题

目录 链表的介绍 单链表的手动实现 单链表的基本框架 打印链表: 获取表长: 头插法新增节点: 尾插法新增节点: 在指定下标插入: 链表的查找 删除链表中第一个出现的key: 删除链表中所有key值 链表…

梯度提升之原理

简介 梯度提升主要是基于数学最值问题 数学描述 目标函数为 obj(θ)∑i1nl(yi,y^i(t))∑k1tw(fk)obj(\theta) \sum_{i1}^n l(y_i, \hat y_i^{(t)}) \sum_{k1}^t w(f_k)obj(θ)i1∑n​l(yi​,y^​i(t)​)k1∑t​w(fk​) 其中ttt表示集成的树的个数,y^i(t)y^i(t−1)…

[学习] Hilbert变换:从数学原理到物理意义的深度解析与仿真实验(完整实验代码)

Hilbert变换:从数学原理到物理意义的深度解析与仿真实验 文章目录Hilbert变换:从数学原理到物理意义的深度解析与仿真实验一、数学原理二、作用与物理意义1.构造解析信号2.相位移动特性3.应用场景三、仿真实验实验1:正弦信号的Hilbert变换实验…

对话弋途科技:当AI重构汽车大脑,一场车载操作系统的“觉醒年代“开始了

(图片来源:Pixels)站在未来看历史,AI汽车刚刚开始。数科星球原创作者丨苑晶编辑丨大兔当特斯拉的自动驾驶仍在全球引发争议时,中国智能汽车战场已悄然开启第二幕。从"四个轮子的大手机"到"移动智能空间…

❗机器学习量化交易模型全面剖析报告基于因子库的机器学习交易模型构建指南

目录 第一章:机器学习在加密货币量化交易中的应用概述 范式转变:从传统因子到机器学习驱动的策略 为什么选择机器学习?机遇、挑战与核心概念 机遇 挑战 核心概念 第二章:为机器学习准备您的因子库 理解量化因子作为机器学…

内容创作智能体:多模态内容生成的完整解决方案

内容创作智能体:多模态内容生成的完整解决方案 🌟 嗨,我是IRpickstars! 🌌 总有一行代码,能点亮万千星辰。 🔍 在技术的宇宙中,我愿做永不停歇的探索者。 ✨ 用代码丈量世界&…

测试学习之——Pytest Day4

Pytest作为Python中功能强大且易于使用的测试框架,深受开发者喜爱。它不仅提供了简洁的测试编写方式,还通过丰富的配置选项、灵活的标记机制和强大的数据驱动能力,极大地提升了测试效率和可维护性。本文将深入探讨Pytest的配置意义与层级、常…

【软件系统架构】系列七:系统性能——路由器性能深入解析

目录 一、路由器的核心功能 二、路由器性能核心指标 1. 吞吐量(Throughput) 2. 并发连接数(Session Capacity) 3. 每秒连接数(CPS,Connections Per Second) 4. 转发延迟(Laten…

【数据结构】第一讲 —— 概论

【数据结构】第一讲 —— 概论 文章目录【数据结构】第一讲 —— 概论1.1 基本概念和常用术语1.2 了解数据结构1. 数据结构2. 数据的逻辑结构3. 数据的物理结构(存储结构)4. 数据的运算1.3 算法的描述和分析1.3.1 算法的描述1.3.21.1 基本概念和常用术语…

全面解析MySQL(2)——CRUD基础

1.CreateCreate(创建):添加新数据到数据库中#基础语法 insert into table_name (column1,column2,column3, ...) values (value1,value2,value3, ...);1.1 单行全列插入value中值的数量和顺序必须和column⼀致describe demo1; -----------------------------------…

某外企笔试总结——纯C语言

这里写自定义目录标题一、sizeof 计算(32位环境)二、简答题三、数据存储区域与可修改性四、字符串比较输出及原因五、数组指针运算输出六、字符串倒序代码错误排查七、下面程序可以把1维数组转为2维数组,然后调用 printArr2D 打印出数组内容&…

Qt Graphs 模块拟取代 charts 和 data visualization还有很长的路要走

近期关注 Qt 6.10 的分支进展, 发现了 Qt 6.10 的 charts 和 data visualization (以下简称 DV)已经被deprecated, 功能将会合并到 graphs 模块。如果后面 charts\ DV 被弃用,那算是很大的API变化了。从Qt 6.5 以后开始引入的 gra…

2025牛客暑期多校训练营2(部分补题)

题目链接:牛客竞赛_ACM/NOI/CSP/CCPC/ICPC算法编程高难度练习赛_牛客竞赛OJ B Bitwise Perfect 思路 考虑到由,那么只有变小的时候对答案的贡献才能够减少,从二进制的角度考虑什么时候变小,只有min(x,y)中的最高位1异或之后变…

Nginx的location匹配规则

Nginx的location匹配规则 为什么你的Nginx配置总是不生效? 改了Nginx配置无数次,reload命令执行了几十遍,浏览器访问时却依然返回404?运维工程师小张上周就遇到了这个问题:明明配置了location /static/ { root /var/ww…

USB 2.0 vs USB 3.0:全面技术对比与选择指南

USB 2.0 vs USB 3.0:全面技术对比与选择指南 引言 在当今数字时代,USB接口已成为连接设备与计算机的最普遍标准之一。从2000年USB 2.0的发布到2008年USB 3.0的问世,USB技术经历了显著的演进。本文将深入比较这两种广泛使用的USB标准&#xff…

DApp架构设计与开发流程指南

目录 DApp架构设计与开发流程指南 引言:DApp的核心特性 一、DApp架构设计 1.1 分层架构设计 各层核心组件: 1.2 典型架构模式 1.2.1 全去中心化架构 1.2.2 混合架构(推荐) 二、开发流程 2.1 敏捷开发流程 2.2 详细开发阶段 阶段1:需求分析与设计(1-2周) 阶段2:智能合约…

Windows下odbc配置连接SQL Server

一、查看SQL Server服务是否启动打开SQL Server 2022配置管理器查看SQL Server运行状态,可以设置 启动或停止服务二、windows下如何配置ODBC数据源1、Windows搜索栏中输入“ODBC数据源管理器”并选择“以管理员身份运行”来打开它2、添加新的数据源ODBC数据源管理器…

MySQL—表设计和聚合函数以及正则表达式

文章目录一、第一范式(原子性)二、第二范式(消除部分依赖)三、第三范式(消除传递依赖)四、表设计五、聚合函数六、正则表达式MySQL 的三大范式(1NF、2NF、3NF)是关系型数据库设计的核…

基于Electron打包jar成Windows应用程序

基于Electron打包jar成Windows应用程序简介注意编译及命令:运行效果登录界面用户管理界面界面全屏锁屏界面文档查看界面简介 本文介绍了一种将maven jar包打包成Windows下EXE可执行程序的方法。 Maven打包Java Web应用成jar,Electron封装jar成Windows …

Autosar RTE实现观测量生成-基于ETAS软件

文章目录前言观测量定义arTypedPerInstanceMemoryPorts Measurable工具链配置及使用Port中的配置arTypedPerInstanceMemory观测量生成文件分析总结前言 之前我们在XCP中,对于标定量和观测量并没有严格按照Autosar标准中定义,Autosar RTE中对标定量和观测…