View on GitHub

severalfly 个人博客

severalfly 个人博客,一起分享知识

Download this project as a .zip file Download this project as a tar.gz file

直接来个例子

首先,定义个基类国家的概念,包含声明方法与接收消息方法;并且保存有联合国的引用

public abstract class Country
{
	protected UnitNations unitNations;

	public Country(UnitNations unitNations)
	{
		super();
		this.unitNations = unitNations;
	}

	public abstract void declare(String msg);

	public abstract void getmsg(String msg);
}

好事者美国,可以声明消息与接收消息

public class USA extends Country
{

	public USA(UnitNations unitNations)
	{
		super(unitNations);
	}

	@Override
	public void declare(String msg)
	{
		this.unitNations.sendMsg(msg, this);
	}

	@Override
	public void getmsg(String msg)
	{
		System.out.println("USA获得信息" + msg);
	}
}

尹拉克就比较惨了,也可以声明消息与接收消息

public class Iraq extends Country
{
	public Iraq(UnitNations unitNations)
	{
		super(unitNations);
	}

	@Override
	public void declare(String msg)
	{
		this.unitNations.sendMsg(msg, this);
	}

	@Override
	public void getmsg(String msg)
	{
		System.out.println("Iraq获得消息" + msg);
	}
}

联合国组织,可能会有多个具体组织的

public abstract class UnitNations
{
	public abstract void sendMsg(String msg, Country cty);
}

联合国了,主要作用就是判断消息应该由那个国家接收,发到相应的国家,这里做的简单,实际应该把消息目的国家放到消息体中的,但是实现麻烦了

public class UnitNationsSecurityCouncil extends UnitNations
{
	private Country Usa;
	private Country Iraq;
	// setters && getters
	@Override
	public void sendMsg(String msg, Country cty)
	{
		if (cty == this.Usa)
		{
			this.Iraq.getmsg(msg);
		}
		else
		{
			this.Usa.getmsg(msg);;
		}
	}
}

客户端一向简单至上

public class MediatorMain
{
	public static void main(String[] args)
	{
		UnitNationsSecurityCouncil unsc = new UnitNationsSecurityCouncil();
		Country c1 = new USA(unsc);
		Country c2 = new Iraq(unsc);

		unsc.setUsa(c1);
		unsc.setIraq(c2);

		c1.declare("开打");
		c2.declare("别打我");
	}
}