中介者模式:用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式的相互引用,从而使其耦合松散,而且可以独立的改变它们之间的交互。
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>
结果如下: