这篇文章主要介绍了Java设计模式之中介者模式怎么实现的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Java设计模式之中介者模式怎么实现文章都会有所收获,下面我们一起来看看吧。
介绍
Java中介者模式(Mediator Pattern)是一种行为设计模式,它可以降低多个对象之间的耦合性,通过一个中介者对象来协调这些对象的交互.
在中介者模式中,多个对象之间的交互不是直接进行的,而是通过一个中介者对象来进行的.这个中介者对象封装了对象之间的交互逻辑,每个对象只需要与中介者对象进行通信,而不需要与其他对象直接进行通信.这种模式可以有效的减少代码的复杂度和维护成本,提高系统的可扩展性和可维护性.
在Java中, 中介者模式可以通过一个接口或抽象类来定义中介者对象,该中介者对象可以定义一些方法来处理对象之间的通信.同时,需要实现一些具体的对象类,这些对象类需要持有中介者对象,并且需要实现一些方法来与中介者对象进行通信.通过这种方式,可以实现对象之间的解耦,提高代码的可读性和可维护性.
实现
抽象中介者
public abstract class Mediator { public abstract void send(String message, Colleague colleague); }
具体中介者
public class ConcreteMediator extends Mediator{ private ConcreteColleague1 concreteColleague1; private ConcreteColleague2 concreteColleague2; public void setConcreteColleague1(ConcreteColleague1 concreteColleague1) { this.concreteColleague1 = concreteColleague1; } public void setConcreteColleague2(ConcreteColleague2 concreteColleague2) { this.concreteColleague2 = concreteColleague2; } @Override public void send(String message, Colleague colleague) { if (colleague == concreteColleague1){ concreteColleague2.receive(message); }else { concreteColleague1.receive(message); } } }
抽象同事类
public abstract class Colleague { protected Mediator mediator; public Colleague(Mediator mediator) { this.mediator = mediator; } /** * 发送消息 * * @param message */ public abstract void send(String message); /** * 消费消息 * @param message */ public abstract void receive(String message); }
具体同事类
public class ConcreteColleague1 extends Colleague { public ConcreteColleague1(Mediator mediator) { super(mediator); } /** * 发送消息 * * @param message */ @Override public void send(String message) { mediator.send(message, this); } /** * 消费消息 * * @param message */ @Override public void receive(String message) { System.out.println("concreteColleague1收到消息:" + message); } } public class ConcreteColleague2 extends Colleague { public ConcreteColleague2(Mediator mediator) { super(mediator); } /** * 发送消息 * * @param message */ @Override public void send(String message) { mediator.send(message, this); } /** * 消费消息 * * @param message */ @Override public void receive(String message) { System.out.println("concreteColleague2收到消息:" + message); } }
测试
public class Demo { public static void main(String[] args) { ConcreteMediator mediator = new ConcreteMediator(); ConcreteColleague1 concreteColleague1 = new ConcreteColleague1(mediator); ConcreteColleague2 concreteColleague2 = new ConcreteColleague2(mediator); mediator.setConcreteColleague1(concreteColleague1); mediator.setConcreteColleague2(concreteColleague2); concreteColleague1.send("Hello concreteColleague2"); concreteColleague2.send("Hello concreteColleague1"); } }
在上面代码中,抽象中介者Mediator定义了同事类之间通信的接口,具体中介者类ConcreteMediator实现了这个接口,并持有同事类列表.抽象同事类Colleague定义了同事类的通信接口,具体同事类ConcreteColleague1和ConcreteColleague2分别实现了这个接口,实现了具体的通信逻辑.在测试代码中,我们创建了一个中介者对象,然后创建了两个同事对象并将他们加入到中介者对象的同事列表中,最后测试了它们之间的通信.