Mediator

 

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作出相应的反应!
 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值