中介者模式

/ 设计模式

中介者模式(Mediator)

用一个中介对象来封装一系列的对象交互。中介者是个对象不要显示地互相引用,从而减低耦合,并且可以独立地改变他们之间的交互

GoF23种设计模式中,属于行为型模式( Behavioral Patterns)

中介者模式提供了一个公有的交互平台,将平台使用者的共性部分集成到平台中,减少了使用者所承担的责任,在系统层面优化了交互关系,降低系统的复杂度。

实例

中介者模式总览

角色说明

举例

我们以班级微信群为例,展示老师在群里通知消息,学生响应的过程。

中介者模式举例

角色说明

code

public interface People {

    void sendWxMessage(WxGroup wxGroup, String message);
}
public class Teacher implements People {

    private String name;

    public Teacher(String name) {
        this.name = name;
    }

    @Override
    public void sendWxMessage(WxGroup wxGroup, String message) {
        wxGroup.sendMessage(name, message);
    }
}
public class Student implements People {

    private String name;

    public Student(String name) {
        this.name = name;
    }

    @Override
    public void sendWxMessage(WxGroup wxGroup, String message) {
        wxGroup.sendMessage(name, message);
    }
}
public interface WxGroup {

    void sendMessage(String name, String message);
}
public class Class1WxGroup implements WxGroup {

    @Override
    public void sendMessage(String name, String message) {
        System.out.println("[1班班级群]" + name + ":\n" + message + "\n");
    }
}
public class Client {

    public static void main(String[] args) {

        Class1WxGroup class1WxGroup = new Class1WxGroup();
        People teacherZ = new Teacher("张老师");
        People ordin = new Student("ordin");

        teacherZ.sendWxMessage(class1WxGroup, "恭喜ordin荣获三好学生!!! [鲜花][掌声]");
        ordin.sendWxMessage(class1WxGroup, "谢谢老师[害羞][害羞]");
    }
}
[1班班级群]张老师:
恭喜ordin荣获三好学生!!! [鲜花][掌声]

[1班班级群]ordin:
谢谢老师[害羞][害羞]

实例

我们日常使用的redisClient、kafkaClient都属于中介者模式的应用。

通过他们的封装,使得各个应用程序之间有了统一关系的维护者。

总结

中介者模式让分散的关系抽象化,进行统一管理和交互,降低系统复杂性。