原创

设计模式之中介者模式

作者:cndz 围观群众:621 更新于 标签:设计模式中介者模式终结者模式简介

简介

中介者模式是一种行为型设计模式,用于减少对象之间的直接交互,通过引入中介者对象来协调其他对象之间的交互。这种模式有助于减少代码的复杂性,提高系统的可维护性和可扩展性。

在现实世界中,我们会发现很多场景下对象之间的交互非常复杂,系统结构也会变得非常复杂,这时候我们就需要一种设计模式来解决这个问题。中介者模式就是一种解决这类问题的设计模式。

优缺点

中介者模式的优点包括:减少了对象之间的耦合性,使系统更易于维护和扩展;中介者对象可以集中管理和控制对象之间的交互,降低了系统的复杂性;可以将一组对象看作一个整体进行处理,提高了系统的灵活性和可重用性。

中介者模式的缺点包括:引入了中介者对象,增加了系统的复杂性;如果中介者对象过于复杂,可能会成为系统的瓶颈;由于对象之间的交互都是通过中介者对象进行的,因此可能会导致系统的运行效率降低。

Java实例

中介者模式的实现可以使用Java语言来进行示例,下面是一个Java实例:

//抽象中介者
interface Mediator{
    void send(String message, Colleague colleague);
}

//具体中介者
class ConcreteMediator implements Mediator{
    private ColleagueA colleagueA;
    private ColleagueB colleagueB;

    public void setColleagueA(ColleagueA colleagueA) {
        this.colleagueA = colleagueA;
    }

    public void setColleagueB(ColleagueB colleagueB) {
        this.colleagueB = colleagueB;
    }

    @Override
    public void send(String message, Colleague colleague) {
        if(colleague == colleagueA){
            colleagueB.notify(message);
        }else{
            colleagueA.notify(message);
        }
    }
}

//抽象同事类
abstract class Colleague{
    protected Mediator mediator;
    public Colleague(Mediator mediator){
        this.mediator = mediator;
    }

    public abstract void notify(String message);
}

//具体同事类A
class ColleagueA extends Colleague{
    public ColleagueA(Mediator mediator) {
        super(mediator);
    }

    @Override
    public void notify(String message) {
        System.out.println("同事A得到信息:" + message);
    }

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

//具体同事类B
class ColleagueB extends Colleague{
    public ColleagueB(Mediator mediator) {
        super(mediator);
    }

    @Override
    public void notify(String message) {
        System.out.println("同事B得到信息:" + message);
    }

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

//测试类
public class Test {
    public static void main(String[] args) {
        ConcreteMediator mediator = new ConcreteMediator();
        ColleagueA colleagueA = new ColleagueA(mediator);
        ColleagueB colleagueB = new ColleagueB(mediator);

        mediator.setColleagueA(colleagueA);
        mediator.setColleagueB(colleagueB);

        colleagueA.send("Hello, colleagueB!");
        colleagueB.send("Hi, colleagueA!");
    }
}

应用场景

中介者模式适用于以下场景:

  • 对象之间的交互比较复杂,存在大量的相互依赖关系,导致系统难以维护和扩展。
  • 对象之间的交互需要通过一个中心控制点进行协调。
  • 一个对象引起的变化需要同时影响其他对象。
  • 系统中的对象存在循环依赖关系,导致系统的结构非常复杂。

总结

中介者模式是一种用于减少对象之间直接交互的设计模式。通过引入中介者对象来协调其他对象之间的交互,可以减少代码的复杂性,提高系统的可维护性和可扩展性。中介者模式的优点包括减少了对象之间的耦合性,使系统更易于维护和扩展;缺点是增加了系统的复杂性,可能会导致系统的运行效率降低。中介者模式适用于对象之间的交互比较复杂,需要通过一个中心控制点进行协调的场景。

总之,中介者模式是一种非常有用的设计模式,能够帮助我们解决复杂的对象交互问题,提高系统的可维护性和可扩展性。如果您在工作中遇到了这样的问题,不妨考虑一下使用中介者模式来解决。

加入收藏