模式的定义与特点
中介者(Mediator)模式的定义:定义一个中介对象来封装一系列对象之间的交互,使原有对象之间的耦合松散,且可以独立地改变它们之间的交互。中介者模式又叫调停模式,它是迪米特法则的典型应用。
中介者模式是一种对象行为型模式,其主要优点如下。
- 降低了对象之间的耦合性,使得对象易于独立地被复用。
- 将对象间的一对多关联转变为一对一的关联,提高系统的灵活性,使得系统易于维护和扩展。
其主要缺点是:当同事类太多时,中介者的职责将很大,它会变得复杂而庞大,以至于系统难以维护。
原文链接
public class MediatorPatternTest { public static void main(String[] args) { Mediator md=new ConcreateMediator(); Colleague c1,c2; c1=new Concreate1_Colleague(); c2=new Concreate2_Colleague(); md.register(c1); md.register(c2); c1.send(); System.out.println("-------------"); c2.send(); } } //抽象中介者 abstract class Mediator { public abstract void register(Colleague c); public abstract void relay(Colleague c);//转发 } //具体中介者 class ConcreateMediator extends Mediator { private List colleagues = new ArrayList(); @Override public void register(Colleague c) { if(!colleagues.contains(c)) { colleagues.add(c); c.setMedium(this); } } @Override public void relay(Colleague c) { for(Colleague ob:colleagues) { if(!ob.equals(c)) { ((Colleague)ob).receive(); } } } } //抽象同事类 abstract class Colleague { protected Mediator mediator; public void setMedium(Mediator mediator) { this.mediator = mediator; } public abstract void receive();//接收 public abstract void send();//发送 } //具体同事类1 class Concreate1_Colleague extends Colleague { @Override public void receive() { System.out.print("具体同事类1, receive"); } @Override public void send() { System.out.print("具体同事类1, send"); mediator.relay(this); //请中介者转发 } } //具体同事类2 class Concreate2_Colleague extends Colleague { @Override public void receive() { System.out.print("具体同事类2, receive"); } @Override public void send() { System.out.print("具体同事类2, send"); mediator.relay(this); //请中介者转发 } }