首页 > 其他分享 >中介者模式:只有一个仲裁者

中介者模式:只有一个仲裁者

时间:2023-06-13 15:55:04浏览次数:28  
标签:仲裁者 mediator void Mediator 模式 sendMessage 中介 message public

中介者模式是一种行为型设计模式,它的主要目的是减少多个对象之间的直接通信,并通过一个中介者对象来协调它们之间的交互。这样可以降低系统的复杂性,增加可维护性和灵活性。

示例代码

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

// 抽象同事类
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);
}

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

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

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

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

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

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

// 具体中介者类
class ConcreteMediator implements Mediator {
    private ConcreteColleagueA colleagueA;
    private ConcreteColleagueB colleagueB;

    public void setColleagueA(ConcreteColleagueA colleagueA) {
        this.colleagueA = colleagueA;
    }

    public void setColleagueB(ConcreteColleagueB colleagueB) {
        this.colleagueB = colleagueB;
    }

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

// 测试代码
public class MediatorPatternDemo {
    public static void main(String[] args) {
        ConcreteMediator mediator = new ConcreteMediator();

        ConcreteColleagueA colleagueA = new ConcreteColleagueA(mediator);
        ConcreteColleagueB colleagueB = new ConcreteColleagueB(mediator);

        mediator.setColleagueA(colleagueA);
        mediator.setColleagueB(colleagueB);

        colleagueA.sendMessage("Hello, I am A.");
        colleagueB.sendMessage("Hi, I am B.");
    }
}

Mediator接口定义了一个方法sendMessage,用于同事之间的通信。Colleague抽象类表示同事类,其中sendMessage方法用于向中介者发送消息,receiveMessage方法用于接收来自中介者的消息。ConcreteColleagueAConcreteColleagueB是具体的同事类,它们实现了Colleague类,并重写了其抽象方法。ConcreteMediator是具体的中介者类,它实现了Mediator接口,并持有对所有同事对象的引用,以便在收到消息时将其转发给正确的同事对象。

简单来说,就是Colleague需要持有Mediator对象,并直接与Mediator对象通信,Mediator对象通过通信内容进行相关处理。其中Mediator对象也需要持有ConcreteColleague[X]对象;

标签:仲裁者,mediator,void,Mediator,模式,sendMessage,中介,message,public
From: https://www.cnblogs.com/li053/p/17477769.html

相关文章

  • C语言-观察者模式
    点击查看代码#include<stdio.h>#defineMAX_OBSERVERS10typedefstructObserver{intOberver_value;void(*update)(structObserver*observer,intvalue);}Observer;typedefstructSubject{intvalue;Observer*observes[MAX_OBSE......
  • MVVM开发模式+双向数据绑定及扩展
    一、MVVM开发模式(1)前端的视图层概念=》由MVC演化(2)M:model【模型层】:渲染页面所以来的数据源(通过ajax从服务端获取的数据)  V:view【视图层】:将数据模型转换成UI展示给用户  VM:【视图模型层】:当监听到DOM变化时,会自动地更新数据源里面所依赖的数据......
  • 聊聊如何利用服务定位器模式按需返回我们需要的服务实例
    前言什么是服务定位器模式服务定位器是一个了解如何提供各种应用所需的服务(或组件)的对象。在服务定位器中,每个服务(或组件)都只有一个单独的实例,并通过ID唯一地标识。用这个ID就能从服务定位器中得到这个服务(或组件)。何时可以考虑使用服务定位器模式服务定位器模式的目......
  • Go学设计模式--原型模式的考查点和使用推荐
    这篇原创本周发布过一次,名字和内容有些问题,不利于长期留存,重新整理发布一次。如果一个类的有非常多的属性,层级还很深。每次构造起来,不管是直接构造还是用建造者模式,都要对太多属性进行复制,那么有没有一种好的方式让我们创建太的时候使用体验更好一点呢?今天的文章里就给大家介......
  • C语言-策略模式
    1.假设我们需要实现一个排序程序,可以对一个整型数组进行排序。我们需要使用策略模式来封装不同的排序算法,例如冒泡排序、插入排序和快速排序。2.Code点击查看代码#include<stdio.h>#include<stdlib.h>#include<string.h>//策略接口typedefvoid(*Strategy)(int*,in......
  • 【技术积累】软件设计模式中的工厂模式【一】
    什么是工厂模式?工厂模式是一种设计模式,它利用工厂类来创建对象,而不是在程序中直接实例化对象。工厂模式可以隐藏创建对象的具体细节,提高代码可维护性和可扩展性。其核心思想是将对象的创建与具体实现分离开来,通过工厂类统一管理对象的创建,使得客户端无需了解创......
  • MVC 模式和三层架构
    1.MVC模式‍MVC模式和三层架构是一些理论的知识,将来我们使用了它们进行代码开发会让我们代码维护性和扩展性更好。‍MVC是一种分层开发的模式,其中:M:Model,业务模型,处理业务V:View,视图,界面展示C:Controller,控制器,处理请求,调用模型和视图​​‍控制器(serlvlet)用来接收浏......
  • 备忘录模式:保存对象状态
    备忘录模式是一种行为型设计模式,用于保存对象的状态,以便在需要时恢复该状态。它通常用于撤销操作或回滚事务。示例代码//被保存状态的对象classOriginator{privateStringstate;publicvoidsetState(Stringstate){this.state=state;}......
  • 职责链模式:推卸责任
    职责链模式是一种行为设计模式,它允许你将请求沿着处理者链进行传递,直到其中一个处理者能够处理该请求为止。//抽象处理者publicabstractclassHandler{protectedHandlersuccessor;publicvoidsetSuccessor(Handlersuccessor){this.successor=suc......
  • 一句话设计模式1: 单例模式
    单例模式:全局唯一的对象。文章目录单例模式:全局唯一的对象。前言一、为什么要全局唯一?二、如何实现单例1.注入到spring中2.饿汉式3.懒汉式第一种:静态内部类第二种:synchronized关键字第二种:双重锁检查总结前言单例可以说是设计模式中很常用的模式了,但也可以说是很复......