面向对象设计与分析40讲(25)中介模式、代理模式、门面模式、桥接模式、适配器模式

文章目录

    • 门面模式
    • 代理模式
    • 中介模式

之所以把这几个模式放到一起写,是因为它们的界限比较模糊,结构上没有明显的差别,差别只是语义上。

这几种模式在结构上都类似:

  • 代理将原本A–>C的直接调用变成:
    A–>B–>C

  • 适配器将原本A–>C的直接调用变成:
    A–>B–>C

  • 桥接将原本A–>C的直接调用变成:
    A–>A’–>C

  • 门面将原本A–>C、A–>D…的一堆调用变成:
    A–>(CD)的调用

  • 中介略有区别,将原本 A、B、C的网状模型:

     A/  \B -- C

变成星型模型:

        A|B -- D  -- C

门面模式

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

门面模式(Facade Pattern)是一种结构型设计模式,旨在提供一个统一的接口(界面),以简化一组复杂系统的使用。该模式为客户端提供一个高级接口,隐藏了系统内部子系统的复杂性,使得客户端只需与门面对象交互,而无需了解底层子系统的实现细节。也叫外观模式。

在门面模式中,通常包含以下几个角色:

  1. 门面(Facade):提供了一个简化的接口,将客户端的请求委派给底层的一个或多个子系统,通过门面对象可以访问底层子系统的功能。

  2. 子系统(Subsystems):实现了系统的各个功能,但对客户端隐藏了具体的实现细节。客户端可以通过门面对象间接地访问这些子系统。

门面模式的主要优点包括:

  • 简化接口:通过门面对象提供简单的接口,隐藏了复杂系统的实现细节,使得客户端更容易使用系统。

  • 解耦:将客户端与底层子系统解耦,客户端只需与门面对象交互,而不需要了解底层子系统之间的关系。

  • 更好的封装性:通过门面对象封装了底层子系统,使得系统更容易维护和扩展。

门面模式通常适用于以下情况:

  • 当系统的许多功能需要以简单的方式提供给客户端时。
  • 当需要对一个复杂系统进行简化,并且需要将其功能封装起来,以便提供一个更容易使用的接口时。
  • 当需要将系统与其客户端之间解耦,以便系统的变化不会影响到客户端时。

代理模式

在这里插入图片描述
在代理模式中,代理对象充当了被访问对象的替身,客户端通过代理对象间接地访问和操作被代理的对象,而不需要直接访问被代理对象。

代理模式通常涉及以下几种角色:

  • 抽象主题(Subject):定义了被代理对象和代理对象之间的公共接口,这样在任何使用被代理对象的地方都可以使用代理对象替代。

  • 真实主题(Real Subject):是被代理的对象,定义了代理对象所代表的真实对象。

  • 代理(Proxy):持有对真实主题的引用,并提供与真实主题相同的接口,以便在任何时候都可以替代真实主题。代理对象通常在访问真实主题之前或之后执行一些额外的操作,如权限验证、缓存、延迟加载等。

中介模式

在这里插入图片描述

中介模式(Mediator Pattern)是一种行为型设计模式,它用于降低多个对象之间的耦合度,通过引入一个中介者对象来协调对象之间的交互。在中介模式中,对象之间不直接相互通信,而是通过中介者对象进行通信,从而减少对象之间的直接依赖关系,提高系统的可扩展性。

中介模式通常涉及以下几种角色:

  1. 中介者(Mediator):定义了一个接口用于与各个同事对象通信,并维护了对各个同事对象的引用。中介者对象可以通过这些引用来了解各个同事对象的状态,并协调它们之间的交互。

  2. 同事对象(Colleague):是各个相互交互的对象,它们之间不直接通信,而是通过中介者来进行通信。每个同事对象都持有对中介者对象的引用,以便在需要时与中介者进行通信。

中介模式的常见用途包括:

  • 解耦对象之间的关系:中介者模式可以降低对象之间的直接依赖关系,将对象之间的交互集中到中介者对象中,从而使得系统更易于维护和扩展。

  • 集中控制对象之间的交互:通过引入中介者对象,可以集中控制对象之间的交互逻辑,使得系统更加清晰和可控。

  • 减少子系统之间的通信复杂性:当系统中存在大量对象需要进行交互时,中介者模式可以有效地减少对象之间的直接通信,从而降低系统的通信复杂度。

中介模式适用于系统中存在多个对象之间需要进行复杂交互的情况,通过引入中介者对象来简化对象之间的交互过程,从而提高系统的灵活性和可维护性。

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

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

相关文章

负采样重要吗?它的理论与应用综述

Does Negative Sampling Matter? A Review with Insights into its Theory and Applications 负采样重要吗?它的理论与应用综述 Does Negative Sampling Matter? A Review with Insights into its Theory and Applications Zhen Yang, Ming Ding, Tinglin Huang,…

基于python实现web漏洞挖掘技术的研究(django)

基于python实现web漏洞挖掘技术的研究(django) 开发语言:Python 数据库:MySQL所用到的知识:网络爬虫,SQL注入,XSS漏洞工具:pycharm、Navicat、Maven 系统的实现与漏洞挖掘 系统的首页面 此次的系统首页面是登录的页…

BootstrapAdmin Net7:基于RBAC的后台管理框架,实现精细化权限管理与多站点单点登录

BootstrapAdmin Net7:基于RBAC的后台管理框架,实现精细化权限管理与多站点单点登录 摘要 随着企业信息化建设的不断深入,后台管理系统在企业运营中扮演着越来越重要的角色。本文介绍了一款基于RBAC(Role-Based Access Control)的…

291个地级市资源错配指数、劳动和资本相对扭曲指数(2006-2021年)

01、数据介绍 资源错配指数(Misallocation Index)是一个用于衡量资源配置效率的指标,它衡量的是生产要素的配置是否合理,是否达到了最优的状态。资源错配指数越高,资源的利用效率越低。资源错配指数主要用于衡量各种生…

企业实施定制鞋厂ERP软件需要注意哪些问题?

企业实施定制鞋厂ERP软件是个复杂的管理系统工程,为了成功地为企业定制实施ERP软件,需要注意和解决几个关键的问题: . 确立ERP系统实施和定制的决策者;. 做好前期咨询与调研工作;. 做好系统产品或项目迭代规划&#x…

Uds诊断协议的请求和响应的寻址

一根总线上挂载着很多ECU,那么基于CAN协议UDS的诊断请求报文,诊断仪是如何发给ECU的?如何精准的找到想要诊断的那个ECU?ECU又是如何将诊断响应的报文返回给诊断仪? 在UDS协议中,规定了诊断请求和响应报文发…

记录:阿里云服务器网站搭建(3)

Docker安装配置Tomcat 拉取镜像 docker pull tomcat:8启动一个tomcat容器用于拷贝配置文件 docker run -d -p 8080:8080 --name tomcat tomcat:8拷贝容器内tomcat配置文件和日志到本地准备映射 docker cp tomcat:/usr/local/tomcat/conf /mydata/tomcat/confdocker cp tomca…

WebStorm2024安装包(亲测可用)

目录 一、软件简介 二、软件下载 一、软件简介 WebStorm是一款由JetBrains公司开发的强大的集成开发环境(IDE),专门用于前端开发。它提供了丰富的功能和工具,包括代码编辑器、调试器、版本控制集成等,使开发人员能够更…

LocalAi,Ollama+AnythingLLM搭建部署本地大模型AI知识库,汉化版本

AnythingLLM 是一个全栈应用程序,您可以使用商业现成的 LLM 或流行的开源 LLM 和 vectorDB 解决方案来构建私有 ChatGPT,无需任何妥协,您可以在本地运行,也可以远程托管并能够智能聊天以及您提供的任何文件。 AnythingLLM 将您的文…

人工智能大模型培训老师叶梓 探索知识库问答中的查询图生成:处理多跳复杂问题的新方法

在人工智能领域,基于知识库的问答(KBQA)技术正变得越来越重要。它使得机器能够理解自然语言问题,并从结构化的知识库中检索答案。然而,面对多跳复杂问题,传统的KBQA方法往往力不从心。近期,研究…

芒果超媒的“乘风破浪”,差了一点市场海浪的反馈

4月21日晚间,芒果超媒发布了2023年度&2024一季度报告。 芒果超媒2023年实现营业收入146.28亿元,同比增长4.66%;净利润35.56亿元,同比增长90.73%;基本每股收益1.90元。公司拟每10股派发现金红利1.8元。2024年第一季…

数据可视化(八):Pandas时间序列——动态绘图,重采样,自相关图,偏相关图等高级操作

Tips:"分享是快乐的源泉💧,在我的博客里,不仅有知识的海洋🌊,还有满满的正能量加持💪,快来和我一起分享这份快乐吧😊! 喜欢我的博客的话,记得…

腾讯云服务器价格明细表2024年最新(CPU内存/带宽/磁盘)

腾讯云服务器价格明细表2024年最新(CPU内存/带宽/磁盘)腾讯云服务器租用优惠价格表:轻量应用服务器2核2G3M价格61元一年,2核2G4M价格99元一年、135元15个月、540元三年,2核4G5M带宽165元一年、252元15个月、756元3年&a…

2024 应届校招经验分享(非互联网篇)

📢📢📢 2024年应届毕业生,浙江大学计算机研究生。自23年秋招开始至今,博主先后拿到了互联网行业、机械制造行业、国企央企、高校体制等多家企业和单位的数十个Offer,了解多行业中的计算机求职方向&#xff…

Java转go,我用了12小时,10小时在解决环境问题

Part1 问题背景 作为一个资深的Java开发者,我深知面向对象的高级语言,语法是不用学的。需要的时候搜索就可以了,甚至可以用ChatGPT来写。 之前我做一个安全多因素校验服务。因为是临时服务,扩展性上基本没有要求,为了快…

Vulnhub靶机 DC-6 打靶实战 详细渗透测试过程

Vulnhub靶机 DC-6 详细渗透流程 打靶实战 目录 Vulnhub靶机 DC-6 详细渗透流程 打靶实战一、将靶机导入到虚拟机当中二、渗透测试主机发现端口扫描信息探测web渗透目录爆破爆破后台密码反弹shell搜集有价值信息SSH远程登录提权反弹jens用户权限的shell 提权利用 一、将靶机导入…

stable diffusion本地部署@win10

一键无脑安装stable-diffusion-webui stable diffusion是当前非常出色的文生图模型,要优于以前gan文生图模型。现在有了stable-diffusion-webui软件,可以一键安装,大大简化了操作难度。本文档就是stable-diffusion-webui在windows 10上的安装…

誉天教育新班上新,免费试听!

数通HCIP 周末班 2024/4/20 阮老师 RHCE 周末班 2024/4/20 徐老师 云计算直通车 周末班 2024/4/20 田老师 欧拉HCIE 周末班 2024/4/20 晏老师 存储HCIE 晚班 2024/4/22 高老师 云服务直通车 周末班 2024/4/27 高老师 安全HCIE 晚班 2024/5/6 胡老…

#天空星定时器点灯

一、定时器信息 STM32F407VET6一共有14个定时器,包括2个高级控制定时器、8个通用定时器、2个基本定时器和2个看门狗定时器。 高级定时器(TIMER1和TIMER8)是四通道定时器,支持输入捕获和输出比较。可以产生PWM信号控制电机和电源管…

基于springboot实现的摄影跟拍预定管理系统

开发语言:Java 框架:springboot JDK版本:JDK1.8 服务器:tomcat7 数据库:mysql 5.7(一定要5.7版本) 数据库工具:Navicat11 开发软件:eclipse/myeclipse/idea Maven…