设计模式-中介者模式

2023-10-25 10:49:32 浏览数 (1)

定义

中介者模式(Mediator Pattern):是一种结构型设计模式,它定义了一个中介者(也称为协调者或联络者),它封装了一组对象之间的交互,使得对象之间不需要显式地相互引用,从而使得代码更加灵活。

中介者模式的关键点如下:

  1. 定义一个中介者对象。
  2. 中介者封装了一组对象之间的交互,这些对象通过接口进行交互。
  3. 中介者对象保存了所有引用了它的对象的引用,同时也保存了它们之间的交互链。
  4. 对象之间通过接口与中介者进行交互,而不需要显式地相互引用。
  5. 中介者可以决定何时将对象之间的交互通知给用户,使得代码更加灵活。

中介者模式是一种解耦工具,它使得我们可以更加轻松地管理复杂的对象之间的交互关系。通过使用中介者模式,我们可以将对象的接口与实现分离,使得代码更加易于理解和维护。同时,中介者模式也可以提高程序的可扩展性和可维护性,使得代码更加易于扩展和修改。

用途

对象与对象之间存在大量的关联关系,这样势必会导致系统的结构变得很复杂,同时若一个对象发生改变,我们也需要跟踪与之相关联的对象,同时做出相应的处理。

实例

代码语言:javascript复制
// Mediator接口定义了send()方法,用于处理对象之间的交互。
interface Mediator {
    void send(String message, Colleague colleague);
}
 // Colleague抽象类表示对象,它包含一个Mediator对象,用于处理对象之间的通信。
abstract class Colleague {
    protected Mediator mediator;
     public Colleague(Mediator mediator) {
        this.mediator = mediator;
    }
     public abstract void receive(String message);
     public abstract void send(String message);
}
 // ConcreteColleague1和ConcreteColleague2是具体的对象实现类,它们实现了Colleague抽象类中的方法。
class ConcreteColleague1 extends Colleague {
    public ConcreteColleague1(Mediator mediator) {
        super(mediator);
    }
     @Override
    public void receive(String message) {
        System.out.println("Colleague1 received message: "   message);
    }
     @Override
    public void send(String message) {
        System.out.println("Colleague1 sends message: "   message);
        mediator.send(message, this);
    }
}
 class ConcreteColleague2 extends Colleague {
    public ConcreteColleague2(Mediator mediator) {
        super(mediator);
    }
     @Override
    public void receive(String message) {
        System.out.println("Colleague2 received message: "   message);
    }
     @Override
    public void send(String message) {
        System.out.println("Colleague2 sends message: "   message);
        mediator.send(message, this);
    }
}
 // ConcreteMediator是具体的中介者实现类,它负责协调对象之间的通信。
class ConcreteMediator implements Mediator {
    private ConcreteColleague1 colleague1;
    private ConcreteColleague2 colleague2;
     public void setColleague1(ConcreteColleague1 colleague1) {
        this.colleague1 = colleague1;
    }
     public void setColleague2(ConcreteColleague2 colleague2) {
        this.colleague2 = colleague2;
    }
     @Override
    public void send(String message, Colleague colleague) {
        if (colleague == colleague1) {
            colleague2.receive(message);
        } else {
            colleague1.receive(message);
        }
    }
}
 public class MediatorPatternDemo {
    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.send("Hello, Colleague2.");
        colleague2.send("Hello, Colleague1.");
    }
}

在上面的代码中,Mediator接口定义了send()方法,用于处理对象之间的交互。Colleague抽象类表示对象,它包含一个Mediator对象,用于处理对象之间的通信。ConcreteColleague1和ConcreteColleague2是具体的对象实现类,它们实现了Colleague抽象类中的方法。ConcreteMediator是具体的中介者实现类,它负责协调对象之间的通信。

在main()方法中,我们创建了一个ConcreteMediator对象和两个ConcreteColleague对象,并调用它们的send()方法进行通信。通过中介者对象进行通信,避免了对象之间的直接耦合。

0 人点赞