中介者模式

中介者模式:用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式的相互引用,从而使其耦合松散,而且可以独立的改变它们之间的交互。

1、抽象中介类

<span style="font-size:18px;">public abstract class Mediator
{
	public abstract void send(String message, Colleague colleague);
}</span>
2、Colleague类
<span style="font-size:18px;">public abstract class Colleague
{
	protected Mediator mediator;

	public Colleague(Mediator mediator)
	{
		this.mediator = mediator;
	}
}</span>
3、具体Colleague类

<span style="font-size:18px;">public class ConcreteColleague1 extends Colleague
{

	public ConcreteColleague1(Mediator mediator)
	{
		super(mediator);
	}
	public void send(String message)
	{
		mediator.send(message, this);
	}
	public void notice(String message)
	{
		System.out.println("同事1得到消息:"+message);
	}
}

class ConcreteColleague2 extends Colleague
{

    public ConcreteColleague2(Mediator mediator)
    {
        super(mediator);
    }

    public void send(String message)
    {
        mediator.send(message, this);
    }
    public void notice(String message)
    {
        System.out.println("同事2得到消息:"+message);
    }
}
</span>
4、具体中介类

<span style="font-size:18px;">public class ConcreteMediator extends Mediator
{
    private ConcreteColleague1 colleague1;
    private ConcreteColleague2 colleague2;

	public void setColleague1(ConcreteColleague1 colleague1)
	{
		this.colleague1 = colleague1;
	}

	public void setColleague2(ConcreteColleague2 colleague2)
	{
		this.colleague2 = colleague2;
	}

	@Override
	public void send(String message, Colleague colleague)
	{
		// TODO Auto-generated method stub
		if(colleague==colleague1)
		{
			colleague2.notice(message);
		}
		else
		{
			colleague1.notice(message);
		}
		
	}

}
</span>
实例:联合国安理会作为全球机构,对维护世界和平起了非常重要的作用。假如在美国侵略伊拉克之前,由安理会进行调解。

1、联合国类

<span style="font-size:18px;">public abstract class UnitedNations
{
public abstract void declare(String message,Country country);
}
</span>
2、国家类

<span style="font-size:18px;">public abstract class Country
{
protected UnitedNations mediator;
public Country(SecurityCouncil mediator)
{
	this.mediator=mediator;
}
</span>
3、美国类

<span style="font-size:18px;">public class America extends Country
{
   
	public America(SecurityCouncil mediator)
	{
		super(mediator);
		// TODO Auto-generated constructor stub
	}
	public void send(String message)
	{
		// TODO Auto-generated method stub
		mediator.declare(message,this);
	}
	
	public void getInfo(String message)
	{
		System.out.println("美国获得伊拉克的意思:"+message);
	}

}
</span>

4、伊拉克类

<span style="font-size:18px;">public class Iraq extends Country
{
	public Iraq(SecurityCouncil mediator)
	{
		super(mediator);
		// TODO Auto-generated constructor stub
	}
	public void send(String message)
	{
		// TODO Auto-generated method stub
      mediator.declare(message,this);
	}
	
	public void getInfo(String message)
	{
		System.out.println("伊拉克获知美国的意思:"+message);
	}

}
</span>

5、安理会类

<span style="font-size:18px;">public class SecurityCouncil extends UnitedNations
{
    private America america;
    private Iraq iraq;
    public void setAmerica(America america)
	{
		this.america = america;
	}
	public void setIraq(Iraq iraq)
	{
		this.iraq = iraq;
	}
	@Override
	public void declare(String message, Country country)
	{
		// TODO Auto-generated method stub
     if(country==america)
     {
    	 iraq.getInfo(message);;
     }
     else
     {
    	america.getInfo(message);
     }
	}
}</span>
6、客户端类

<span style="font-size:18px;">public class Client
{
public static void main(String[] args)
{
	SecurityCouncil meditor=new SecurityCouncil();
	America america=new America(meditor);
	Iraq iraq=new Iraq(meditor);
	meditor.setAmerica(america);
	meditor.setIraq(iraq);
	
	america.send("不准研制核武器,否则开战了");
	iraq.send("我们没有核武器,也不怕侵略");
}
}</span>
结果如下:



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值