首页 > 其他分享 >结构型设计模式详解与对比:优化你的系统设计

结构型设计模式详解与对比:优化你的系统设计

时间:2024-09-28 10:23:34浏览次数:7  
标签:组合 对象 Pattern 适配器 接口 详解 模式 设计模式 结构型

结构型设计模式(Structural Design Patterns)主要关注类和对象的组合,以形成更大的结构。它们通过识别实体之间的关系,帮助设计师确保系统的各个部分能够协同工作。以下是几种常见的结构型设计模式及其详细介绍和对比:

一, 代理模式(Proxy Pattern)

用途: 为另一个对象提供一个替身或占位符,以控制对这个对象的访问。

实现方式: 创建代理类,代理类和实际类实现相同的接口。

优点:

  • 控制了对对象的访问,可以增加额外的功能,如延迟加载、访问控制等。

缺点:

  • 增加了系统的复杂性,可能导致性能下降。

点击查看代理模式详情

二,装饰器模式(Decorator Pattern)

用途: 动态地给一个对象添加一些额外的职责。

实现方式: 创建一个装饰类包装原始类,装饰类和原始类具有相同的接口。

优点:

  • 比生成子类更加灵活,可以动态扩展对象的功能。

缺点:

  • 可能导致大量的小类,增加系统复杂性。

点击查看装饰器模式详情

三,适配器模式(Adapter Pattern)

用途: 将一个类的接口转换成客户希望的另一个接口,使得原本由于接口不兼容而无法一起工作的类可以协同工作。

实现方式:

  • 类适配器: 通过多重继承实现。
  • 对象适配器: 通过组合实现。

优点:

  • 提高了类的复用性和灵活性。

缺点:

  • 类适配器需要多重继承,可能导致复杂性增加。

点击查看适配器模式详情

四,组合模式(Composite Pattern)

用途: 将对象组合成树形结构以表示“部分-整体”的层次结构,使得客户对单个对象和组合对象的使用具有一致性。

实现方式: 通过定义一个组件接口,叶子节点和组合节点实现该接口。

优点:

  • 简化了客户端代码,使得处理单个对象和组合对象的方式一致。

缺点:

  • 使得系统设计更加复杂,可能导致过度设计。

点击查看组合模式详情

五,门面模式(Facade Pattern)

用途: 为子系统中的一组接口提供一个一致的界面,定义一个高层接口,使得子系统更容易使用。

实现方式: 创建一个外观类,封装子系统的复杂性。

优点:

  • 减少了复杂系统的依赖关系,简化了接口。

缺点:

  • 不符合开闭原则,修改外观类可能影响子系统。

点击查看门面模式详情

六,享元模式(Flyweight Pattern)

用途: 通过共享技术来有效地支持大量细粒度对象的复用,减少内存占用。

实现方式: 将对象的可共享部分和不可共享部分分离,使用工厂类管理共享对象。

优点:

  • 减少了对象数量,节省了内存。

缺点:

  • 需要分离可共享和不可共享部分,增加了系统复杂性。

点击查看享元模式详情

七,桥接模式(Bridge Pattern)

用途: 将抽象部分与实现部分分离,使它们可以独立变化。

实现方式: 通过组合,将抽象类与实现类接口分离。

优点:

  • 解决了类爆炸问题,适用于多个维度变化的系统。

缺点:

  • 增加了系统的复杂性,需要额外的理解和设计。

点击查看桥接模式详情

八,对比

  • 适配器模式 vs 桥接模式: 适配器模式主要解决接口不兼容的问题,而桥梁模式则是为了分离抽象和实现,解决类爆炸问题。
  • 组合模式 vs 装饰器模式: 组合模式用于表示“部分-整体”的层次结构,而装饰模式用于动态地添加职责。组合模式强调结构,装饰模式强调功能扩展。
  • 门面模式 vs 代理模式: 外观模式简化子系统接口,减少依赖关系;代理模式控制对象访问,增加功能。外观模式关注接口简化,代理模式关注控制访问。
  • 享元模式 vs 其他模式: 享元模式通过共享技术减少内存占用,适用于大量相似对象的场景。其他模式更多关注对象的组合和职责扩展。

九,总结

结构型设计模式通过优化类和对象的组合,提高了系统的灵活性和可维护性。这些模式帮助开发者构建更清晰、更易于理解和扩展的系统结构。理解和应用这些模式可以显著提升软件设计的质量,使系统更具弹性和可扩展性。


如果你对设计模式、软件架构、编程技巧等内容感兴趣,欢迎关注我们的同名微信公众号【技术拾光者】。在这里,我们将定期分享最新的技术文章和实用的编程技巧,帮助你不断提升自己的技术水平。

扫描下方二维码,立即关注我们吧!
技术拾光者

感谢你的阅读和支持,我们期待与你在微信公众号上交流更多有趣的技术话题!

标签:组合,对象,Pattern,适配器,接口,详解,模式,设计模式,结构型
From: https://blog.csdn.net/weixin_43319056/article/details/142574259

相关文章

  • 【C语言标准库函数】标准输入输出函数详解2:字符串输入输出
    目录一、字符串输入函数1.1.gets函数(已废弃)1.1.1.函数简介1.1.2.注意和废弃原因1.2.fgets函数1.2.1.函数简介1.2.2.使用场景1.2.3.注意事项1.2.4.示例二、字符串输出函数2.1.puts函数2.1.1.函数简介2.1.2. 使用场景2.1.3.注意事项2.1.4.示例2.2.......
  • 压缩文件解压失败怎么办?常见原因与解决方法详解
    在日常办公中,我们经常需要解压各种压缩文件(如ZIP、RAR、7Z等)。但有时候,解压过程中会出现失败的情况,这可能导致文件无法正常使用或数据丢失。今天小编分享5个压缩文件解压失败的常见原因以及解决方法,一起来看看吧!原因一:压缩文件损坏压缩文件损坏是最常见的解压失败原因。文件......
  • keepalived+nginx实现高可用的案例详解(主主模式)
    文章目录前言keepalived主备模式和主主模式有什么区别1.主备模式(Master-BackupMode)2.主主模式(Active-ActiveMode或DualMasterMode)主备模式vs主主模式的区别总结:环境案例实现具体步骤ngx1ngx2验证前言keepalived主备模式和主主模式有什么区别Keepali......
  • SpringBoot整合JPA实现CRUD详解
    SpringBoot版本是2.0以上(2.6.13)JDK是1.8一、依赖<dependencies><!--jdbc--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jdbc</artif......
  • 【数据结构】堆(Heap)详解
     在深入了解堆这一重要的数据结构之前,不妨先回顾一下我之前的作品——“二叉树详解”。上篇文章......
  • 在Linux中挂载远程主机目录:详解SSHFS挂载
    在日常的服务器管理过程中,我们经常会遇到这样一种场景:需要将一台远程主机上的某个目录挂载到本地主机上,以便于进行文件共享、远程操作等。对于Linux用户来说,sshfs是一个简单而高效的工具,可以轻松地将远程目录挂载到本地文件系统中。本文将为大家详细讲解如何使用sshfs来实现这一......
  • Linux 防火墙与安全管理工具详解
    Linux防火墙与安全管理工具详解1.Iptables概述Iptables是Linux系统中用于控制网络流量的工具,通过定义规则来过滤、转发和修改数据包。其规则可以细致地管理进入和离开系统的数据流。1.1三表五链1.1.1三表Iptables中主要有三种表,每种表用于不同的操作:filter表......
  • C++ 智能指针详解: std::unique_ptr 和 std::shared_ptr
    C++11引入了智能指针,它们是管理动态分配内存的强大工具。本文将详细介绍两种最常用的智能指针:std::unique_ptr和std::shared_ptr。std::unique_ptr概述std::unique_ptr是一种独占所有权的智能指针。它确保一个对象只能被一个unique_ptr所拥有,这意味着不能复制unique_......
  • C++17 std::variant 详解:概念、用法和实现细节
    std::variant是C++17引入的一个新的标准库类型,它提供了一种类型安全的联合体。这个类可以在同一时间持有几种可能类型中的一个值。本文将详细介绍std::variant的概念、用法和实现细节。1.基本概念std::variant是一个模板类,可以存储几种不同类型中的一个值。它的声明如下:te......
  • 告别XP系统HAL.DLL错误:详解修复工具使用步骤与技巧
    在WindowsXP操作系统中,HAL.DLL(硬件抽象层DLL)是一个至关重要的系统文件,它负责操作系统与硬件之间的交互。当HAL.DLL文件丢失、损坏或无法被系统正确识别时,系统可能会无法启动,并显示错误信息,如“缺少或损坏<Windows根目录>\system32\hal.dll”。针对这一问题,虽然直接名为“XP系......