首页 > 其他分享 >Mediator Pattern

Mediator Pattern

时间:2023-09-06 11:01:23浏览次数:31  
标签:mediator Pattern Mediator 同事 中介 sendMessage message public

Mediator Pattern 就类似现实生活中的中介(中间人),房屋中介、媒婆中介、权利寻租中介... ,现实中为什么需要中介,在现实中的原因主要是两个 一为了保护双方当事人的安全,只要中介人不泄密,他们双方就可以秘密的把交易完成,并且双方都是安全的。二是买卖双方并不信任双方,但是他们都共同的信任同一个中介人,那么通过中介人就能促成这笔交易(类似淘宝平台)。

在计算世界中为什么需要中介呢?计算机的 Mediator Pattern,通过引入一个中介者对象,将系统中多个对象之间的复杂交互关系转化为多个对象与中介者之间的简单交互关系。它的目标是促进对象之间的松耦合,减少对象之间的直接依赖关系,从而提高系统的可维护性和可扩展性。

中介者模式的核心思想是将复杂的交互逻辑集中到中介者对象中,各个对象只需要与中介者对象进行简单的通信即可。这样可以降低系统的复杂度,提高系统的可维护性和可扩展性。中介者模式常用于大型系统中,特别是当系统中对象之间存在复杂的交互关系时,可以通过中介者模式将交互关系的管理集中到中介者对象中,简化系统的设计和维护。

Key Elements

  • 中介人 抽象接口
  • 中介人 具体实现
  • 买方 抽象接口(或抽象)
  • 卖方 抽象接口(或抽象)
  • 买方 具体实现
  • 卖方 具体实现
  • Client(平台)

Example

下面以一个两个陌生同事需要交流的场景进行演示:

中介

// 抽象中介者
interface Mediator {
    void sendMessage(String message, Colleague colleague);
}

// 具体中介者
class ConcreteMediator implements Mediator {
    private Colleague colleague1;
    private Colleague colleague2;

    public void setColleague1(Colleague colleague1) {
        this.colleague1 = colleague1;
    }

    public void setColleague2(Colleague colleague2) {
        this.colleague2 = colleague2;
    }

    @Override
    public void sendMessage(String message, Colleague colleague) {
        if (colleague == colleague1) {
            colleague2.receiveMessage(message);
        } else if (colleague == colleague2) {
            colleague1.receiveMessage(message);
        }
    }
}

同事

// 抽象同事类
abstract class Colleague {
    protected Mediator mediator;

    public Colleague(Mediator mediator) {
        this.mediator = mediator;
    }

    public abstract void sendMessage(String message);

    public abstract void receiveMessage(String message);
}

// 具体同事类1
class ConcreteColleague1 extends Colleague {
    public ConcreteColleague1(Mediator mediator) {
        super(mediator);
    }

    @Override
    public void sendMessage(String message) {
        mediator.sendMessage(message, this);
    }

    @Override
    public void receiveMessage(String message) {
        System.out.println("ConcreteColleague1 received message: " + message);
    }
}

// 具体同事类2
class ConcreteColleague2 extends Colleague {
    public ConcreteColleague2(Mediator mediator) {
        super(mediator);
    }

    @Override
    public void sendMessage(String message) {
        mediator.sendMessage(message, this);
    }

    @Override
    public void receiveMessage(String message) {
        System.out.println("ConcreteColleague2 received message: " + message);
    }
}

Client

// 客户端代码
public class Client {
    public static void main(String[] args) {
        // 创建中介者
        ConcreteMediator mediator = new ConcreteMediator();

        // 创建具体同事类
        ConcreteColleague1 colleague1 = new ConcreteColleague1(mediator);
        ConcreteColleague2 colleague2 = new ConcreteColleague2(mediator);

        // 设置中介者的同事对象
        mediator.setColleague1(colleague1);
        mediator.setColleague2(colleague2);

        // 同事类之间进行通信
        colleague1.sendMessage("Hello from Colleague1");
        colleague2.sendMessage("Hi from Colleague2");
    }
}

在上述示例中,存在两个具体同事类 ConcreteColleague1 和 ConcreteColleague2,它们之间的通信通过中介者 ConcreteMediator 进行。中介者实现了 Mediator 接口,其中的 sendMessage 方法根据具体同事对象的不同,将消息传递给另一个同事对象。具体同事类中的 sendMessage 方法通过中介者对象的引用调用 sendMessage 方法,实现了同事对象之间的间接通信。客户端代码创建了中介者对象和具体同事对象,并设置了中介者对象的同事对象。最后,通过具体同事对象的 sendMessage 方法发送消息,中介者对象负责将消息转发给接收方。

这个简单的示例展示了中介者模式的基本结构和使用方式。通过中介者模式,同事对象之间的通信被解耦,彼此之间不再直接依赖,而是通过中介者进行交互,从而提高了系统的可维护性和扩展性。

标签:mediator,Pattern,Mediator,同事,中介,sendMessage,message,public
From: https://www.cnblogs.com/mysticbinary/p/17681709.html

相关文章

  • Bridge Pattern
    WhatisBridgePattern桥接模式(BridgePattern),旨在将抽象部分和实现部分解耦,使它们可以独立地变化。该模式通过将抽象和实现分离,使它们可以独立地进行扩展和修改,同时通过桥接(Bridge)将它们连接起来。将一个事物原本耦合在一起的东西,通过定义成抽象和实现两个维度,做到解耦,解耦就......
  • Template Pattern —— Behavioral Class
    HookMethod钩子方法(HookMethod)之所以被称为“钩子”,是因为它在算法或流程中提供了一个“钩子”,允许子类在特定的点上“钩入”自己的实现逻辑,从而影响算法的行为或流程的执行。它类似于一个挂钩、锚点,所以叫Hookmethod,它允许子类插入自定义的代码来改变或扩展算法的功能。T......
  • Flyweight Pattern —— Creational Class
    享元模式在主流的标准里是放到结构大类下的,但是我感觉这个模式的最终作用也是为了获取一个类,所以我将其划分到创建大类下。WhatisFlyweightPatternFlyweight是指轻量级的。享元模式旨在支持大量细粒度的对象共享,以减少内存消耗。该模式通过共享相似对象的部分状态,来减少对......
  • Factory Pattern —— Creational Class
    core工厂模式(FactoryPattern)是一种创建型设计模式,用于创建对象而不暴露对象创建的逻辑。它将对象的实例化过程封装在一个工厂类中,客户端通过调用工厂类的方法来创建对象,从而实现了解耦和灵活性。工厂模式的核心思想是将对象的创建与使用分离。客户端不直接实例化对象,而是通过调......
  • 20230626 java.util.regex.Pattern
    介绍java.util.regex.PatternpublicfinalclassPatternimplementsjava.io.Serializable正则表达式的编译表示API常量flagUNIX_LINES启用UNIX行模式在多行模式中匹配^和$时,只有\n被识别成行终止符CASE_INSENSITIVE不区分大小写匹配字符时忽略字母的......
  • Visitor Pattern-访问者模式
    C#中的访问者模式(VisitorPattern)是一种行为型设计模式,它将数据结构和数据操作分离,使得可以在不修改数据结构的前提下定义新的操作。访问者模式的核心思想是将数据结构和数据操作解耦,将数据操作封装到独立的访问者类中。数据结构定义一组元素,每个元素接受访问者的访问并调用相应......
  • Strategy Pattern-策略模式
    C#中的策略模式(StrategyPattern)是一种行为型设计模式,它可以让你定义一族算法,并将每个算法封装起来,使它们可以相互替换,从而使得算法的变化独立于使用算法的客户端。策略模式的核心思想是将算法的定义和使用分离,将不同的算法封装到独立的策略类中。这样,客户端可以根据需求从不同的......
  • StatePattern-状态模式
    C#中的状态模式是一种行为型设计模式,它允许对象在其内部状态发生改变时改变其行为。状态模式的核心思想是将对象的行为封装在不同的状态类中,对象根据当前状态的不同而执行不同的行为。在C#中,实现状态模式通常需要以下几个参与者:状态接口(StateInterface):定义了表示不同状态的方法......
  • SAP ABAP 模式(Pattern)、模板的创建与调用
    1.代码模板2.模式(Pattern) 调用3.标准模式,一些内置固定格式代码的填充  ......
  • IteratorPattern-迭代器模式
    在C#中,迭代器模式(IteratorPattern)是一种行为型设计模式,它提供了一种方法来顺序访问一个聚合对象中的各个元素,而无需暴露聚合对象的内部表示。迭代器模式有以下几个关键角色:Iterator(迭代器):定义访问和遍历元素的接口。ConcreteIterator(具体迭代器):实现迭代器接口,实现对聚合对象的......