中介者模式(Mediator Pattern)是用来降低多个对象和类之间的通信复杂性。这种模式提供了一个中介类,该类通常处理不同类之间的通信,并支持松耦合,使代码易于维护。中介者模式属于行为型模式。

中介者模式的结构

       中介者模式又称为调停者模式,从类图中看,共分为3部分:

  • 抽象中介者:定义好同事类对象到中介者对象的接口,用于各个同事类之间的通信。一般包括一个或几个抽象的事件方法,并由子类去实现。
  • 中介者实现类:从抽象中介者继承而来,实现抽象中介者中定义的事件方法。从一个同事类接收消息,然后通过消息影响其他同时类。
  • 同事类:如果一个对象会影响其他的对象,同时也会被其他对象影响,那么这两个对象称为同事类。在类图中,同事类只有一个,这其实是现实的省略,在实际应用中,同事类一般由多个组成,他们之间相互影响,相互依赖。同事类越多,关系越复杂。并且,同事类也可以表现为继承了同一个抽象类的一组实现组成。在中介者模式中,同事类之间必须通过中介者才能进行消息传递。

Coleague

package design.pattern.mediator;

public class Coleague {
    private String info;
    private Mediator mediator;
    public Coleague(String info, Mediator mediator) {
        this.info = info;
        this.mediator = mediator;
        mediator.register(info, this);
    }
    public void sendMsg(String coleague, String msg) {
        mediator.transfer(this.info, coleague, msg);
    }
    public void receive(String from, String msg) {
        System.out.println(info + " receive from " + from +": " +msg);
    }
}

Mediator

package design.pattern.mediator;

import java.util.HashMap;
import java.util.Map;

public class Mediator {
    private Map<String, Coleague> container = new HashMap<>();
    
    public void register(String info, Coleague coleague) {
        container.put(info, coleague);
    }

    public void transfer(String from, String to, String msg) {
        if (container.containsKey(to)) {
            container.get(to).receive(from ,msg);
        }
    }

}

Client

package design.pattern.mediator;

public class Client {
    public static void main(String[] args) {
        Mediator med = new Mediator();
        Coleague A = new Coleague("A", med);
        Coleague B = new Coleague("B", med);
        A.sendMsg("B", "hello world");
    }
}

 

posted on 2017-10-24 21:58  啊哈咧  阅读(170)  评论(0编辑  收藏  举报