面向对象设计与分析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):是各个相互交互的对象,它们之间不直接通信,而是通过中介者来进行通信。每个同事对象都持有对中介者对象的引用,以便在需要时与中介者进行通信。

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

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

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

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

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

相关推荐
肘击鸣的百k路1 天前
Java 代理模式详解
java·开发语言·代理模式
OkeyProxy1 天前
怎麼解決IP地址衝突的問題?
代理模式·proxy模式·ip地址·代理服务器·海外ip代理
morning_judger2 天前
【设计模式系列】桥接模式(十三)
java·设计模式·桥接模式
无敌岩雀2 天前
C++设计模式结构型模式———桥接模式
c++·设计模式·桥接模式
杨充4 天前
07.适配器模式设计思想
适配器模式
G皮T4 天前
【设计模式】结构型模式(二):代理模式
java·设计模式·编程·代理模式·proxy pattern·结构型模式
G皮T5 天前
【设计模式】结构型模式(一):适配器模式、装饰器模式
java·设计模式·适配器模式·装饰器模式·decorator·adapter·结构型模式
ROS机器人学习与交流5 天前
虚拟机桥接模式连不上,无法进行SSH等远程操作
桥接模式
zzzhpzhpzzz5 天前
设计模式——代理模式
设计模式·系统安全·代理模式
羽愿5 天前
技术总结(十九)
代理模式