中介者模式是一种行为型设计模式,它定义了一个中介者对象,用于封装一组对象之间的交互。这种模式使得对象之间不直接相互通信,而是通过中介者对象进行通信,从而减少对象之间的耦合。

在中介者模式中,有三个主要角色:

1. 中介者(Mediator): 定义了一个接口,用于与各个同事对象进行通信。
public interface Mediator {
    void sendMessage(String message, Colleague colleague);
}

2. 具体中介者(ConcreteMediator): 实现了中介者接口,负责协调各个同事对象的交互。
public class ConcreteMediator implements Mediator {
    private Colleague colleague1;
    private Colleague colleague2;

    public void setColleague1(Colleague colleague1) {
        this.colleague1 = colleague1;
    }

    public void setColleague2(Colleague colleague2) {
        this.colleague2 = colleague2;
    }

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

3. 同事对象(Colleague): 定义了一个接口,用于与中介者进行通信。
public interface Colleague {
    void sendMessage(String message);
    void receiveMessage(String message);
}

4. 具体同事对象(ConcreteColleague): 实现了同事接口,每个同事对象都知道中介者对象,并通过中介者进行通信。
public class ConcreteColleague implements Colleague {
    private Mediator mediator;

    public ConcreteColleague(Mediator mediator) {
        this.mediator = mediator;
    }

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

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

5. 客户端代码: 创建中介者对象和同事对象,并将同事对象注册到中介者。
public class Client {
    public static void main(String[] args) {
        ConcreteMediator mediator = new ConcreteMediator();

        ConcreteColleague colleague1 = new ConcreteColleague(mediator);
        ConcreteColleague colleague2 = new ConcreteColleague(mediator);

        mediator.setColleague1(colleague1);
        mediator.setColleague2(colleague2);

        colleague1.sendMessage("Hello, colleague2!");
        colleague2.sendMessage("Hi, colleague1!");
    }
}

在这个例子中,通过中介者模式,同事对象之间的通信不再直接发生,而是通过中介者进行。这样可以降低对象之间的耦合度,使系统更加灵活。中介者模式特别适用于对象之间的交互较为复杂、对象之间的关系较为动态的场景。


转载请注明出处:http://www.pingtaimeng.com/article/detail/13954/设计模式