Mediator Pattern: 用一个中介对象来封装一系列关于对象交互行为.
为何使用Mediator?
各个对象之间的交互操作非常多;每个对象的行为操作都依赖彼此对方,修改一个对象的行为,同时会涉及到修改很多其他对象的行为,如果使用Mediator模式,可以使各个对象间的耦合松散,只需关心和 Mediator的关系,使多对多的关系变成了一对多的关系,可以降低系统的复杂性,提高可修改扩展性.
Event.java
package com.flyingh.event;
import com.flyingh.mediator.Mediator;
public interface Event {
void onEventA();
void onEventB();
void onEventC();
void onEventD();
void setMediator(Mediator mediator);
}
Mediator.java
package com.flyingh.mediator;
public interface Mediator {
void actionA();
void actionB();
void actionC();
void actionD();
}
A.java
package com.flyingh.event;
import com.flyingh.mediator.Mediator;
public class A implements Event {
private Mediator mediator;
public Mediator getMediator() {
return mediator;
}
public void setMediator(Mediator mediator) {
this.mediator = mediator;
}
@Override
public void onEventA() {
mediator.actionA();
}
@Override
public void onEventB() {
System.out.println("EventB发生,A作出相应的反应!");
}
@Override
public void onEventC() {
System.out.println("EventC发生,A作出相应的反应!");
}
@Override
public void onEventD() {
System.out.println("EventD发生,A作出相应的反应!");
}
}
B.java
package com.flyingh.event;
import com.flyingh.mediator.Mediator;
public class B implements Event {
private Mediator mediator;
@Override
public void onEventB() {
mediator.actionB();
}
@Override
public void onEventA() {
System.out.println("EventA发生,B作出相应的反应!");
}
@Override
public void onEventC() {
System.out.println("EventC发生,B作出相应的反应!");
}
@Override
public void onEventD() {
System.out.println("EventD发生,B作出相应的反应!");
}
@Override
public void setMediator(Mediator mediator) {
// TODO Auto-generated method stub
this.mediator = mediator;
}
}
C.java
package com.flyingh.event;
import com.flyingh.mediator.Mediator;
public class C implements Event {
private Mediator mediator;
@Override
public void onEventC() {
mediator.actionC();
}
@Override
public void onEventA() {
System.out.println("EventA发生,C作出相应的反应!");
}
@Override
public void onEventB() {
System.out.println("EventB发生,C作出相应的反应!");
}
@Override
public void onEventD() {
System.out.println("EventD发生,C作出相应的反应!");
}
@Override
public void setMediator(Mediator mediator) {
// TODO Auto-generated method stub
this.mediator = mediator;
}
}
D.java
package com.flyingh.event;
import com.flyingh.mediator.Mediator;
public class D implements Event {
private Mediator mediator;
@Override
public void onEventD() {
mediator.actionD();
}
@Override
public void onEventA() {
System.out.println("EventA发生,D作出相应的反应!");
}
@Override
public void onEventB() {
System.out.println("EventB发生,D作出相应的反应!");
}
@Override
public void onEventC() {
System.out.println("EventC发生,D作出相应的反应!");
}
@Override
public void setMediator(Mediator mediator) {
// TODO Auto-generated method stub
this.mediator = mediator;
}
}
ConcreteMediator.java
package com.flyingh.mediator;
import com.flyingh.event.Event;
public class ConcreteMediator implements Mediator {
private Event a;
private Event b;
private Event c;
private Event d;
public ConcreteMediator(Event a, Event b, Event c, Event d) {
super();
this.a = a;
this.b = b;
this.c = c;
this.d = d;
}
@Override
public void actionA() {
b.onEventA();
c.onEventA();
d.onEventA();
}
@Override
public void actionB() {
a.onEventB();
c.onEventB();
d.onEventB();
}
@Override
public void actionC() {
a.onEventC();
b.onEventC();
d.onEventC();
}
@Override
public void actionD() {
a.onEventD();
b.onEventD();
c.onEventD();
}
}
Client.java
package com.flyingh.demo;
import com.flyingh.event.A;
import com.flyingh.event.B;
import com.flyingh.event.C;
import com.flyingh.event.D;
import com.flyingh.event.Event;
import com.flyingh.mediator.ConcreteMediator;
import com.flyingh.mediator.Mediator;
public class Client {
public static void main(String[] args) {
Event a = new A();
Event b = new B();
Event c = new C();
Event d = new D();
Mediator mediator = new ConcreteMediator(a, b, c, d);
a.setMediator(mediator);
b.setMediator(mediator);
c.setMediator(mediator);
d.setMediator(mediator);
a.onEventA();
System.out.println("**********");
b.onEventB();
System.out.println("**********");
c.onEventC();
System.out.println("**********");
d.onEventD();
}
}
程序运行结果如下:
EventA发生,B作出相应的反应!
EventA发生,C作出相应的反应!
EventA发生,D作出相应的反应!
**********
EventB发生,A作出相应的反应!
EventB发生,C作出相应的反应!
EventB发生,D作出相应的反应!
**********
EventC发生,A作出相应的反应!
EventC发生,B作出相应的反应!
EventC发生,D作出相应的反应!
**********
EventD发生,A作出相应的反应!
EventD发生,B作出相应的反应!
EventD发生,C作出相应的反应!