Java设计模式(十八)中介者模式

您所在的位置:网站首页 java中consolelog Java设计模式(十八)中介者模式

Java设计模式(十八)中介者模式

2023-05-18 06:01| 来源: 网络整理| 查看: 265

一、概述

中介者模式是一种行为型设计模式,用于减少对象之间的直接耦合关系,通过引入一个中介者对象来协调不同对象之间的交互。

在中介者模式中,中介者对象充当一个调度器的角色,负责协调不同对象之间的通信和动作。不同的对象之间不直接相互通信,而是通过中介者对象来进行通信和协调。

下面是一个中介者模式的代码示例,其中我们定义了一个抽象中介者类 Mediator 和具体的中介者类 ConcreteMediator。在 ConcreteMediator 中,我们定义了不同的同事类对象 Colleague,并实现了中介者协调不同对象之间的通信和协作的方法。同事类对象 Colleague 中则定义了发送消息和接收消息的方法。这样,不同的同事类对象之间就可以通过中介者对象进行通信和协作。

二、代码 //1.抽象中介者类 public abstract class Mediator { //将消息发送给colleague public abstract void send(String message, Colleague colleague); } //2.抽象同事类 public abstract class Colleague { protected Mediator mediator; public Colleague(Mediator mediator) { this.mediator = mediator; } public abstract void send(String message); public abstract void receive(String message); } //3.具体中介者类 public class ConcreteMediator extends Mediator { private Colleague colleague1; private Colleague colleague2; public void setColleague1(Colleague colleague1) { this.colleague1 = colleague1; } public void setColleague2(Colleague colleague2) { this.colleague2 = colleague2; } public void send(String message, Colleague colleague) { //判断应该把消息发给哪个colleague if (colleague == colleague1) { colleague2.receive(message); } else { colleague1.receive(message); } } } //4.具体同事类1 public class ConcreteColleague1 extends Colleague { public ConcreteColleague1(Mediator mediator) { super(mediator); } /** * 将消息发给自己的mediator * @param message */ @Override public void send(String message) { mediator.send(message, this); } @Override public void receive(String message) { System.out.println("ConcreteColleague1 received message: " + message); } } //5.具体同事类2 public class ConcreteColleague2 extends Colleague { public ConcreteColleague2(Mediator mediator) { super(mediator); } /** * 将消息发给自己的mediator * @param message */ @Override public void send(String message) { mediator.send(message, this); } @Override public void receive(String message) { System.out.println("ConcreteColleague2 received message: " + message); } } //6.测试类 public class Test { public static void main(String[] args) { //创建中介者和两个colleague ConcreteMediator mediator = new ConcreteMediator(); //两个colleague都和中介关联 ConcreteColleague1 colleague1 = new ConcreteColleague1(mediator); ConcreteColleague2 colleague2 = new ConcreteColleague2(mediator); mediator.setColleague1(colleague1); mediator.setColleague2(colleague2); //通过中介者实现消息转发 colleague1.send("Hello from colleague1!"); colleague2.send("Hello from colleague2!"); } }

在上述代码中,我们定义了抽象中介者类 Mediator,其中包含了 send() 方法用于发送消息,并且具体的中介者类 ConcreteMediator 继承自 Mediator 并实现了 send() 方法。中介者类持有不同的同事类对象,并根据发送消息的同事类选择合适的接收者进行消息的转发。

抽象同事类 Colleague 定义了发送消息和接收消息的抽象方法,并持有一个中介者对象。具体的同事类 ConcreteColleague1 和 ConcreteColleague2 继承自 Colleague 并实现了抽象方法。在发送消息时,同事类会调用中介者对象的 send() 方法,将消息发送给中介者。

在测试代码中,我们创建了中介者对象 ConcreteMediator,以及具体的同事类对象 ConcreteColleague1 和 ConcreteColleague2。然后我们将同事对象与中介者对象关联起来,通过调用中介者对象的 setColleague1() 和 setColleague2() 方法进行设置。

在测试代码的最后,我们通过同事对象的 send() 方法发送消息。当同事对象调用 send() 方法时,实际上是通过中介者对象的 send() 方法进行消息的发送和协调。中介者根据接收到的消息以及发送消息的同事对象,决定将消息转发给哪个同事对象。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3