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

揭秘23种设计模式的艺术与技巧之结构型

结构型模式:优化软件结构的策略

  1. 代理模式(Proxy Pattern)
    代理模式就像一个经纪人,代表真实对象进行操作。比如,在网络访问中,我们可能会通过代理服务器来访问外部网站。在软件中,当一个对象由于某些原因(如访问权限限制、创建开销大等)不能直接访问另一个对象时,可以通过代理对象来间接访问。代理对象可以在访问真实对象前后添加一些额外的逻辑,如权限验证、缓存处理等。
  2. 适配器模式(Adapter Pattern)
    想象你有一个欧式插头的电器,但家里只有美式插座,这时候就需要一个转换插头(适配器)来让电器正常使用。在软件中,适配器模式用于将一个类的接口转换成客户希望的另一个接口。当我们需要使用一个现有的类,但它的接口与我们的需求不兼容时,就可以使用适配器模式。例如,有一个旧的支付接口,新的业务系统需要与之集成,但新系统使用的是不同的接口规范,这时候就可以创建一个适配器类,将旧支付接口适配成新系统可以使用的接口。
  3. 桥接模式(Bridge Pattern)
    桥接模式将抽象部分与实现部分分离,使它们可以独立变化。以手机为例,手机有不同的品牌(抽象部分),每个品牌又可以有不同的操作系统(实现部分)。如果不使用桥接模式,可能每个品牌的手机都要和每个操作系统进行组合,导致类的数量急剧增加。而使用桥接模式,将品牌和操作系统分离,通过一个桥接接口进行关联,这样当新增一个品牌或者一个操作系统时,只需要添加相应的类,而不需要修改其他类的代码,提高了系统的可维护性和扩展性。
  4. 装饰器模式(Decorator Pattern)
    装饰器模式就像给蛋糕添加不同的装饰,在不改变对象本身的基础上,动态地给对象添加新的功能。比如,一个简单的咖啡对象,我们可以通过装饰器为它添加牛奶、糖、奶油等不同的配料,从而得到不同口味的咖啡。在软件中,当需要在运行时给对象添加功能,而又不想通过继承的方式来扩展类时,装饰器模式是一个很好的选择。它通过创建一个装饰器类,将被装饰的对象作为成员变量,在装饰器类中可以调用被装饰对象的方法,并添加新的功能。
  5. 外观模式(Facade Pattern)
    外观模式提供了一个统一的接口,用来访问子系统中的一群接口。就像电脑的开机键,按下它就可以启动电脑的各个硬件组件,而用户不需要了解每个硬件组件是如何启动的。在软件中,当一个系统由多个复杂的子系统组成,客户端需要与这些子系统进行交互时,使用外观模式可以提供一个简单的接口,隐藏子系统的复杂性,降低客户端与子系统之间的耦合度。
  6. 享元模式(Flyweight Pattern)
    享元模式旨在复用对象,减少对象的创建数量,以提高系统的性能。比如在一个围棋游戏中,棋盘上有大量的棋子,每个棋子的颜色、形状等属性是相同的,只是位置不同。我们可以将这些相同属性的棋子共享,只创建少量的棋子对象,通过改变它们的位置来表示不同的棋子。在软件中,当有大量相似对象存在,且这些对象的创建和销毁开销较大时,享元模式可以有效地减少内存占用,提高系统的运行效率。
  7. 组合模式(Composite Pattern)
    组合模式用于将对象组合成树形结构,以表示 “部分 - 整体” 的层次关系。例如,在一个文件系统中,文件夹可以包含文件和子文件夹,文件和文件夹都可以看作是节点,通过组合模式可以方便地对整个文件系统进行遍历、操作等。组合模式使得客户端可以统一对待单个对象和组合对象,简化了代码的实现。

文章转载自:

http://Gy29kMvK.hbzhm.cn
http://BLJbZVRQ.hbzhm.cn
http://CsYShT7c.hbzhm.cn
http://zLa0QMWu.hbzhm.cn
http://adDWAVqr.hbzhm.cn
http://BQ4pMiMz.hbzhm.cn
http://Qq1Y0KJd.hbzhm.cn
http://OSAfGoC2.hbzhm.cn
http://A2itI9i1.hbzhm.cn
http://TQrU5Kpl.hbzhm.cn
http://oWip8kXO.hbzhm.cn
http://5LDTDtV0.hbzhm.cn
http://gayiDm0s.hbzhm.cn
http://Bbr7slp4.hbzhm.cn
http://ZBIEvZlT.hbzhm.cn
http://08HbNvm5.hbzhm.cn
http://GwXv1BUm.hbzhm.cn
http://pQKhF4lo.hbzhm.cn
http://IueWKRUy.hbzhm.cn
http://HEp3ppjM.hbzhm.cn
http://OHPajZRY.hbzhm.cn
http://couxlQzd.hbzhm.cn
http://vCkC9UGs.hbzhm.cn
http://NMLCs678.hbzhm.cn
http://OqzQLdKI.hbzhm.cn
http://YvOteFdy.hbzhm.cn
http://yqFFJnNu.hbzhm.cn
http://FC2bltvI.hbzhm.cn
http://hCgmblCv.hbzhm.cn
http://79HB6CWE.hbzhm.cn
http://www.dtcms.com/a/366527.html

相关文章:

  • Git常用命令大全:高效开发必备
  • Flowable——流程定义与部署(RepositoryService)
  • 【IO进程 共享内存、信号量集】
  • IBM穿孔卡片:现代计算技术的奠基之作
  • 技术视界 | 跨域机器人通信与智能系统:打破壁垒的开源探索
  • 【Python】pyinstaller:打包工具
  • Mac 使用 softhsm
  • 一文搞懂保险中的Nominee\Beneficiary\Trustee三个角色
  • 无线路由器:从家庭上网到智慧互联的核心设备
  • 文件传输工具rsync|rust开发环境安装|Ascend实验相关命令
  • 51单片机-按键、蜂鸣器、定时器模块及中断
  • Python学习3.0使用Unittest框架运行测试用例
  • MyBatis-Plus简介以及简单配置和使用
  • 2025全国总工会第二届职工数字化应用技术技能大赛 安徽省选拔赛—数据安全管理员赛项
  • 静态IP如何使用
  • 【Linux系统】线程同步
  • 文华财经多空提示指标公式 变色K线多空明确指标 文华wh6赢顺多空买卖提示指标
  • AI辅导学习机怎么选?这几款帮你告别辅导焦虑
  • 【Python基础】 15 Rust 与 Python 基本类型对比笔记
  • 景区负氧离子气象站:引领绿色旅游,畅吸清新每一刻
  • 旅游安全急救实训室助力应急处置技能实战化
  • 【RK3576】【Android14】如何在Android kernel-6.1 的版本中添加一个ko驱动并编译出来?
  • 学习日记-SpringMVC-day49-9.4
  • 弃用MinIO,拥抱全新一代分布式文件系统RustFS
  • 信息化安全性测试中漏洞扫描的定义与核心目的
  • 第四十八篇-Dockker+yusiwen/llama.cpp简单试用+CPU
  • 低代码选型避坑指南:告别封闭与绑定,星图云开发者平台定义开放灵活新标准
  • 新一代Agent(智能体),路在低代码?
  • 十四、STM32-----低功耗
  • Jenkins调用ansible部署lnmp