软件编程
位置:首页>> 软件编程>> java编程>> Java设计模式之中介者模式的实现方式

Java设计模式之中介者模式的实现方式

作者:.番茄炒蛋  发布时间:2022-08-10 23:43:06 

标签: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");
   }
}

Java设计模式之中介者模式的实现方式

在上面代码中,抽象中介者Mediator定义了同事类之间通信的接口,具体中介者类ConcreteMediator实现了这个接口,并持有同事类列表.抽象同事类Colleague定义了同事类的通信接口,具体同事类ConcreteColleague1和ConcreteColleague2分别实现了这个接口,实现了具体的通信逻辑.在测试代码中,我们创建了一个中介者对象,然后创建了两个同事对象并将他们加入到中介者对象的同事列表中,最后测试了它们之间的通信.

  • 当多个对象之间存在复杂的交互关系,且彼此之间的耦合度较高时,可以考虑使用中介者模式进行重构.

  • 当系统中存在大量的对象,而且它们之间的交互关系错综复杂时,可以考虑使用中介者模式进行简化和优化.

  • 当需要再不影响其他部分的情况下扩展和修改系统时,可以使用中介者模式来实现系统的灵活性和可扩展性.

来源:https://blog.csdn.net/qq_43135259/article/details/129447393

0
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com