什么是中介者模式(Mediator)?

269 阅读1分钟

世界上并没有完美的程序,但是我们并不因此而沮丧,因为写程序就是一个不断追求完美的过程。

  1. 意图
    定义一个对象,封装一组对象的交互,降低对象之间的耦合度,对象之间无需显示引用,并且可以单独改变对象的交互方式。
  2. 类图
    在这里插入图片描述
  3. 实例
// 对象间通信形式
interface Mediator{
    void sendMessage(String message);
    String receiveMessage();
}

class MediatorImpl1 implements Mediator{
    private String message;
    @Override
    public void sendMessage(String message) {
        this.message = message;
    }

    @Override
    public String receiveMessage() {
        return message;
    }
}

// 聊天室形式
class SimpleMediator{
    public static void showMessage(Me me, String message){
        System.out.println(me.getName() + " send " + message);
    }
}

class Me{
    private String name;
    private String message;

    // 发送消息通过Mediator解耦合
    public void sendMessage(){
        SimpleMediator.showMessage(this, message);
    }

    public void sendMessage1(Mediator mediator){
        mediator.sendMessage(message);
        System.out.println("send : " + message);
    }

    public void receiveMessage1(Mediator mediator){
        String re = mediator.receiveMessage();
        System.out.println("re : " + re);
    }

    public static Me create(){
        return new Me();
    }

    public String getName() {
        return name;
    }

    public Me setName(String name) {
        this.name = name;
        return this;
    }

    public String getMessage() {
        return message;
    }

    public Me setMessage(String message) {
        this.message = message;
        return this;
    }
}
  1. 测试
class MediatorTest{
    public static void main(String[] args) {
        Me me1 = Me.create().setName("h1").setMessage("hello m2");
        Me me2 = Me.create().setName("h2").setMessage("hello m1");

        System.out.println("第一种 --- ");
        me1.sendMessage();
        me2.sendMessage();

        System.out.println("第二种 --- ");
        MediatorImpl1 mediatorImpl1 = new MediatorImpl1();
        System.out.println("me1 发送:");
        me1.sendMessage1(mediatorImpl1);
        System.out.println("me2 接收:");
        me2.receiveMessage1(mediatorImpl1);
    }
}

运行结果:

第一种 --- 
h1 send hello m2
h2 send hello m1
第二种 --- 
me1 发送:
send : hello m2
me2 接收:
re : hello m2

想看更多吗?请访问:设计模式