前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >设计模式分类:结构型模式

设计模式分类:结构型模式

作者头像
运维开发王义杰
发布2023-08-10 14:37:09
2340
发布2023-08-10 14:37:09
举报
文章被收录于专栏:运维开发王义杰

在上一篇文章中,我们介绍了设计模式的基本概念和分类,以及创建型模式。本文将介绍结构型模式,它们描述如何将类或者对象结合在一起形成更大的结构,就像搭积木,可以通过简单积木的组合形成复杂的、功能更为强大的结构。

结构型模式

结构型模式(Structural Pattern)描述如何将类或者对象结合在一起形成更大的结构,就像搭积木,可以通过简单积木的组合形成复杂的、功能更为强大的结构。结构型模式不仅仅关注类和对象的组成,而且重点关注它们之间的关联关系。

根据其意图或目的,结构型模式可以分为两大类:

  • 类结构型模式(Class Structural Pattern):类的结构型模式使用继承机制来组合多个类,以实现一个新功能的组合。
  • 对象结构型模式(Object Structural Pattern):对象的结构型模式使用组合或者聚合关系来组合多个对象,以实现一个新功能的组合。

根据“合成复用原则”,系统中要尽量使用关联关系来取代继承关系,因此大部分结构型设计模式都属于对象结构型设计模式。

下面我们来看看每一类中包含哪些具体的设计模式,并举一些简单的例子来说明它们的作用。

类结构型模式

类结构型模式包括以下一种:

  • 适配器模式(Adapter Pattern):将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类能一起工作。
    • 例如:你有一个旧版本的电视机,它只有一个AV接口,但是你想要用HDMI接口连接电脑或者游戏机。你可以使用一个AV转HDMI的适配器,将电视机和电脑或者游戏机连接起来。这个适配器就是适配器模式的一个应用。

对象结构型模式

对象结构型模式包括以下六种:

  • 桥接模式(Bridge Pattern):将抽象部分与实现部分分离,使它们都可以独立地变化。
    • 例如:你想要绘制不同形状和颜色的图形,你可以将形状和颜色分别抽象出来,然后通过桥接关系将它们组合起来。这样你就可以灵活地创建各种形状和颜色的图形。
  • 组合模式(Composite Pattern):将对象组合成树形结构以表示“部分-整体”的层次关系。使得用户对单个对象和组合对象的使用具有一致性。
    • 例如:你想要管理一个公司的员工信息,你可以将员工抽象为一个接口,然后定义两种实现类:普通员工和经理。普通员工没有下属,经理有若干下属。这样你就可以将员工组织成一棵树形结构,表示公司的层级关系。你可以对员工进行统一的操作,比如计算工资、打印报表等。
  • 装饰模式(Decorator Pattern):动态地给一个对象添加一些额外的职责。就增加功能来说,装饰模式比生成子类更为灵活。
    • 例如:你想要给一个文本编辑器添加一些额外的功能,比如语法高亮、自动补全、错误提示等。你可以使用装饰模式,定义一个抽象的编辑器接口,然后定义一个基本的编辑器实现类,以及若干装饰类,每个装饰类都实现编辑器接口,并且持有一个编辑器对象的引用。这样你就可以动态地给基本的编辑器添加不同的装饰类,实现不同的功能。
  • 外观模式(Facade Pattern):为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。
    • 例如:你想要使用电脑完成一些操作,比如打开浏览器、输入网址、浏览网页等。你不需要了解电脑内部的各种硬件和软件的细节,只需要通过电脑提供的简单的界面来操作即可。这个简单的界面就是外观模式的一个应用。
  • 享元模式(Flyweight Pattern):运用共享技术有效地支持大量细粒度的对象。
    • 例如:你想要在一个文档中显示大量的字符,如果每个字符都是一个独立的对象,那么内存开销会很大。你可以使用享元模式,将字符对象设计成享元类,使得相同的字符对象可以被共享使用。这样就可以减少对象的数量,节省内存空间。
  • 代理模式(Proxy Pattern):为其他对象提供一种代理以控制对这个对象的访问。
    • 例如:你想要访问一个远程服务器上的资源,但是由于网络延迟或者安全限制,你不能直接访问。你可以使用代理模式,创建一个代理服务器,让代理服务器去访问远程服务器上的资源,并将结果返回给你。这样你就可以通过代理服务器来间接地访问远程服务器上的资源。
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-06-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 运维开发王义杰 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 结构型模式
    • 类结构型模式
      • 对象结构型模式
      相关产品与服务
      腾讯云 BI
      腾讯云 BI(Business Intelligence,BI)提供从数据源接入、数据建模到数据可视化分析全流程的BI能力,帮助经营者快速获取决策数据依据。系统采用敏捷自助式设计,使用者仅需通过简单拖拽即可完成原本复杂的报表开发过程,并支持报表的分享、推送等企业协作场景。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档