在现实中,你要和天南海北的朋友聊天需要中介,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(); } }
可以看到上述代码,将每个具体角色与中介者绑定,每个具体角色都有发送和接收两个功能,当某一个角色发出请求时,中介者需要通知所有除了这个角色以外的符合条件的具体角色做出响应。
应用场景:多个对象之间存在复杂的依赖关系,难以复用时可以选择此设计模式,每个角色只负责自己的事宜,该对谁的请求做出响应完全是中介者该做的事。