设计模式-中介者模式

Posted vinlen

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了设计模式-中介者模式相关的知识,希望对你有一定的参考价值。

在现实中,你要和天南海北的朋友聊天需要中介,QQ,微信,信息等等这些都是中介工具。中介工具的作用就是把同一类的人放在一起(群),一个发送消息的时候,需要通知其他人

java中的中介者模式有四个角色:抽象中介者,具体抽象者,抽象角色,具体角色。

抽象中介者(群的概念)

abstract class Mediator {
    public abstract void register(Colleague colleague);
    public abstract void realy(Colleague colleague);
}

具体中介者(具体的群)

public class ConcreteMediator extends Mediator {
    private ArrayList<Colleague> colleagues=new ArrayList<>();


    @Override
    public void register(Colleague colleague) {
      if(colleagues.contains(colleague)){
          colleagues.add(colleague);
          colleague.setMediator(this);
      }
    }

    @Override
    public void realy(Colleague colleague) {
        for (Colleague colleague1 : colleagues) {
            if(!colleague1.equals(colleague))
                colleague1.receive();
        }
    }
}

抽象角色

abstract class Colleague {
    protected Mediator mediator;

    public void setMediator(Mediator mediator) {
        this.mediator = mediator;
    }
    public abstract void receive();
    public abstract void send();

}

具体角色1

public class ConcreteColleague1 extends Colleague {
    @Override
    public void receive() {
        System.out.println("同事一收到请求");

    }

    @Override
    public void send() {
        System.out.println("同事一发送请求");
        mediator.realy(this);
    }
}

具体角色2

public class ConcreteColleague2 extends Colleague {
    @Override
    public void receive() {
        System.out.println("同事2收到请求");
    }

    @Override
    public void send() {
        System.out.println("同事2发送请求");
        mediator.realy(this);
    }
}

测试类

public class Client {
    public static void main(String[] args) {
        ConcreteMediator md = new ConcreteMediator();
        ConcreteColleague1 c1 = new ConcreteColleague1();
        ConcreteColleague2 c2 = new ConcreteColleague2();
        md.register(c1);
        md.register(c2);
        c1.send();

    }
}

可以看到上述代码,将每个具体角色与中介者绑定,每个具体角色都有发送和接收两个功能,当某一个角色发出请求时,中介者需要通知所有除了这个角色以外的符合条件的具体角色做出响应。

应用场景:多个对象之间存在复杂的依赖关系,难以复用时可以选择此设计模式,每个角色只负责自己的事宜,该对谁的请求做出响应完全是中介者该做的事。

以上是关于设计模式-中介者模式的主要内容,如果未能解决你的问题,请参考以下文章

设计模式之中介者模式

设计模式----中介者模式及简单总结(2018/10/30)

(十九)中介者模式-代码实现

设计模式之中介者模式

设计模式之中介模式与解释器模式详解和应用

20160227.CCPP体系详解(0037天)