Mediator 中介者模式

package com.lonton.designpatterns;

interface IMediator
{
	public void ask();

	public void answer();

	public void registerA(ColleagueA a);

	public void registerB(ColleagueB b);
}

class ConcreteMediator implements IMediator
{
	ColleagueA a;
	ColleagueB b;

	@Override
	public void ask()
	{
		// TODO Auto-generated method stub	
		System.out.println("A: Hi, I need a data!");
	}

	@Override
	public void answer()
	{
		// TODO Auto-generated method stub
		a.setData(b.getData());
		System.out.println("B: Hey budy, here it is!");
	}

	@Override
	public void registerA(ColleagueA a)
	{
		// TODO Auto-generated method stub
		this.a = a;
	}

	@Override
	public void registerB(ColleagueB b)
	{
		// TODO Auto-generated method stub
		this.b = b;
	}

}

abstract class Colleague
{
	int data;
	IMediator mediator;

	public abstract void doSomething();
	
	public abstract void setData(int data);
	
	public abstract int getData();
}

class ColleagueA extends Colleague
{
	public ColleagueA(IMediator mediator)
	{
		data = 0;
		
		this.mediator = mediator;
		this.mediator.registerA(this);
	}

	@Override
	public void doSomething()
	{
		// TODO Auto-generated method stub
		mediator.ask();
	}

	@Override
	public void setData(int data)
	{
		// TODO Auto-generated method stub
		this.data = data;
	}

	@Override
	public int getData()
	{
		// TODO Auto-generated method stub
		return data;
	}

}

class ColleagueB extends Colleague
{
	public ColleagueB(IMediator mediator)
	{
		data = 200;
		
		this.mediator = mediator;
		this.mediator.registerB(this);
	}

	@Override
	public void doSomething()
	{
		// TODO Auto-generated method stub
		mediator.answer();
	}

	@Override
	public void setData(int data)
	{
		// TODO Auto-generated method stub
		this.data = data;
	}

	@Override
	public int getData()
	{
		// TODO Auto-generated method stub
		return data;
	}

}

public class MediatorTest
{
	public static void main(String[] args)
	{
		IMediator mediator = new ConcreteMediator();
		
		ColleagueA colleagueA = new ColleagueA(mediator);
		ColleagueB colleagueB = new ColleagueB(mediator);
		
		System.out.println("The data in colleagueA is: " + colleagueA.getData());
		
		colleagueA.doSomething();
		colleagueB.doSomething();
		
		System.out.println("The data in colleagueA is: " + colleagueA.getData());
	}
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章