Java 设计模式之中介者模式

Java 设计模式之中介者模式

在软件开发中,中介者模式是一种行为型设计模式,它允许我们将对象之间的通信封装在一个中介者对象中,从而降低对象之间的耦合度。该模式属于行为型模式,因为它可以在运行时改变对象的行为。

在本文中,我们将介绍中介者模式的基本原理,并通过一个简单的案例来演示如何使用中介者模式。

中介者模式基本原理

在中介者模式中,我们定义了两种角色:中介者(Mediator)和同事类(Colleague)。中介者是一个对象,它封装了对象之间的通信逻辑,并提供了一个接口来让同事类之间进行通信。同事类是一个对象,它通过中介者对象来与其他同事类进行通信。

当同事类之间需要进行通信时,它们将消息发送给中介者对象,并由中介者对象来处理消息,并将消息发送给其他同事类。这种方式可以让对象之间的通信变得简单而可控,从而提高了代码的可维护性和可扩展性。

在 Java 中,我们可以使用接口来定义中介者和同事类的行为,从而实现中介者模式。

中介者模式案例

假设我们正在开发一个简单的图形用户界面(GUI)应用程序,用于显示不同形状的图形。我们可以使用中介者模式来实现这个应用程序,如下所示:

首先,我们定义一个名为 Mediator 的中介者接口,它定义了同事类之间通信的方法。

public interface Mediator {
    
    
    void send(String message, Colleague colleague);
}

在 Mediator 接口中,我们定义了一个 send() 方法,用于接收同事类发送的消息,并将消息发送给其他同事类。

然后,我们创建一个名为 ConcreteMediator 的具体中介者类,它实现了 Mediator 接口,并维护了同事类之间的联系。

public class ConcreteMediator implements Mediator {
    
    
    private List<Colleague> colleagues;

    public ConcreteMediator() {
    
    
        this.colleagues = new ArrayList<>();
    }

    public void addColleague(Colleague colleague) {
    
    
        colleagues.add(colleague);
    }

    @Override
    public void send(String message, Colleague colleague) {
    
    
        for (Colleague c : colleagues) {
    
    
            if (c != colleague) {
    
    
                c.receive(message);
            }
        }
    }
}

在 ConcreteMediator 类中,我们维护了一个同事类列表,并实现了 send() 方法来接收同事类发送的消息,并将消息发送给其他同事类。

最后,我们创建一个名为 Colleague 的抽象同事类,它定义了同事类的基本行为,并保存了一个中介者对象的引用。

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);
}

在 Colleague 抽象类中,我们定义了同事类的基本行为,包括发送消息和接收消息。同事类保存了一个中介者对象的引用,以便能够与其他同事类进行通信。

接下来,我们创建一个名为 ConcreteColleague 的具体同事类,它实现了 Colleague 抽象类,并使用中介者对象来进行通信。

public class ConcreteColleague extends Colleague {
    
    
    public ConcreteColleague(Mediator mediator) {
    
    
        super(mediator);
    }

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

    @Override
    public void receive(String message) {
    
    
        System.out.println("Received message: " + message);
    }
}

在 ConcreteColleague 类中,我们实现了 Colleague 抽象类中定义的方法,并使用中介者对象来进行通信。具体地说,当同事类需要发送消息时,它调用 send() 方法,并将消息和自己作为参数传递给中介者对象;当同事类接收到消息时,它调用 receive() 方法,并输出收到的消息。

最后,我们可以创建一个具体的中介者对象和多个具体的同事类对象,并将同事类对象注册到中介者对象中。然后,我们可以使用同事类对象的 send() 方法来发送消息,并通过中介者对象来进行通信。

ConcreteMediator mediator = new ConcreteMediator();

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

mediator.addColleague(colleague1);
mediator.addColleague(colleague2);
mediator.addColleague(colleague3);

colleague1.send("Hello, world!");

在这个示例中,我们首先创建了一个 ConcreteMediator 对象和多个 ConcreteColleague 对象,并将 ConcreteColleague 对象注册到 ConcreteMediator 对象中。然后,我们使用 colleague1 的 send() 方法来发送消息,并通过 ConcreteMediator 对象来进行通信。

通过使用中介者模式,我们可以将对象之间的通信逻辑封装在一个中介者对象中,从而降低对象之间的耦合度,并提高代码的可维护性和可扩展性。

总结

中介者模式是一种常用的行为型设计模式,它允许我们将对象之间的通信封装在一个中介者对象中,从而降低对象之间的耦合度,并提高代码的可维护性和可扩展性。在本文中,我们介绍了中介者模式的基本原理,并通过一个简单的案例来演示如何使用中介者模式。我们还讨论了中介者模式的优缺点,以及在什么情况下应该使用中介者模式。

中介者模式的优点包括:

  • 降低对象之间的耦合度,从而提高代码的可维护性和可扩展性。
  • 可以将对象之间的通信逻辑封装在一个中介者对象中,使得对象之间的通信变得简单而可控。

中介者模式的缺点包括:

  • 中介者对象可能会变得过于复杂,导致代码难以维护。
  • 如果中介者对象出现问题,整个系统的稳定性可能会受到影响。

总之,中介者模式是一种非常有用的设计模式,它可以帮助我们降低对象之间的耦合度,提高代码的可维护性和可扩展性。在开发大型的软件系统时,我们应该优先考虑使用中介者模式来管理对象之间的通信。

猜你喜欢

转载自blog.csdn.net/Susan003/article/details/130113370
今日推荐