用一個中介對象來封裝一系統的對象交互。中介者使各對象不需要顯示地相互引用,從而使其耦合松散,而可以獨立改變他們之間的效死.
組成部份:
1.中介者
2.具體中介者
3.同事
4.具體同事
組成部份之間的關系:

例子:
1.人
package simpleMediator;


/** *//**
* <ul>
* <li>Title:[Person]</li>
* <li>Description: [人(抽象同事)]</li>
* <li>Copyright 2009 Upengs Co., Ltd.</li>
* <li>All right reserved.</li>
* <li>Created by [Huyvanpull] [2011-8-3]</li>
* <li>Midified by [modifier] [modified time]</li>
* </ul>
*
* @version 1.0
*/
public abstract class Person


{

/** *//** 姓名 */
private String name;

/** *//** 條件 */
private int condition;

/** *//** 中介者(不管男孩還是女孩,都需要知道中介者,通過中介者去找對象) */
private Mediator mediator;

/** *//**
* <ul>
* <li>Description:[構造方法]</li>
* <ul>
*
* @param name
* @param condition
* @param mediator
*/
public Person(String name, int condition, Mediator mediator)

{
this.name = name;
this.condition = condition;
this.mediator = mediator;
}

/** *//**
* <ul>
* <li>Description:[找對象]</li>
* <li>Created by [Huyvanpull] [2011-8-3]</li>
* <li>Midified by [modifier] [modified time]</li>
* </ul>
*
* @param person
* @return
*/
public abstract boolean findPartner(Person person);
public String getName()

{
return name;
}
public void setName(String name)

{
this.name = name;
}
public int getCondition()

{
return condition;
}
public void setCondition(int condition)

{
this.condition = condition;
}
public Mediator getMediator()

{
return mediator;
}
public void setMediator(Mediator mediator)

{
this.mediator = mediator;
}
}

2.男孩
package simpleMediator;

public class Boy extends Person


{

/** *//**
* <ul>
* <li>Description:[構造方法]</li>
* <ul>
*
* @param name
* @param condition
* @param mediator
*/
public Boy(String name, int condition, Mediator mediator)

{
super(name, condition, mediator);
}

/**//*
* (non-Javadoc)
*
* @see simpleMediator.Person#findPartner(simpleMediator.Person)
*/
public boolean findPartner(Person person)

{
System.out.println("boy try to find girl.");
this.getMediator().findPartner(person);
return false;
}
}

3.女孩
package simpleMediator;

public class Girl extends Person


{

/** *//**
* <ul>
* <li>Description:[構造方法]</li>
* <ul>
*
* @param name
* @param condition
* @param mediator
*/
public Girl(String name, int condition, Mediator mediator)

{
super(name, condition, mediator);
}

/**//*
* (non-Javadoc)
*
* @see simpleMediator.Person#findPartner(simpleMediator.Person)
*/
public boolean findPartner(Person person)

{
System.out.println("girl try to find boy.");
this.getMediator().findPartner(person);
return false;
}
}

4.婚介
package simpleMediator;


/** *//**
* <ul>
* <li>Title:[Mediator]</li>
* <li>Description: [婚姻登記]</li>
* <li>Copyright 2009 Upengs Co., Ltd.</li>
* <li>All right reserved.</li>
* <li>Created by [Huyvanpull] [2011-8-3]</li>
* <li>Midified by [modifier] [modified time]</li>
* </ul>
*
* @version 1.0
*/
public interface Mediator


{

/** *//**
* <ul>
* <li>Description:[男孩登記]</li>
* <li>Created by [Huyvanpull] [2011-8-3]</li>
* <li>Midified by [modifier] [modified time]</li>
* </ul>
*
* @param boy
*/
public void registBoy(Boy boy);

/** *//**
* <ul>
* <li>Description:[女孩登記]</li>
* <li>Created by [Huyvanpull] [2011-8-3]</li>
* <li>Midified by [modifier] [modified time]</li>
* </ul>
*
* @param girl
*/
public void registGirl(Girl girl);

/** *//**
* <ul>
* <li>Description:[介紹對象]</li>
* <li>Created by [Huyvanpull] [2011-8-3]</li>
* <li>Midified by [modifier] [modified time]</li>
* </ul>
*
* @param person
* @return
*/
public boolean findPartner(Person person);
}5.具體婚介
package simpleMediator;


/** *//**
* <ul>
* <li>Title:[RedSunMediator]</li>
* <li>Description: [紅日婚介所]</li>
* <li>Copyright 2009 Upengs Co., Ltd.</li>
* <li>All right reserved.</li>
* <li>Created by [Huyvanpull] [2011-8-3]</li>
* <li>Midified by [modifier] [modified time]</li>
* </ul>
*
* @version 1.0
*/
public class RedSunMediator implements Mediator


{

/** *//** 男孩 */
private Boy boy;

/** *//** 女孩 */
private Girl girl;

/**//* (non-Javadoc)
* @see simpleMediator.Mediator#registBoy(simpleMediator.Boy)
*/
public void registBoy(Boy boy)

{
this.boy = boy;
}

/**//* (non-Javadoc)
* @see simpleMediator.Mediator#registGirl(simpleMediator.Girl)
*/
public void registGirl(Girl girl)

{
this.girl = girl;
}
// 根據各自的條件匹配
public boolean findPartner(Person person)

{
if (person instanceof Boy)

{
this.boy = (Boy) person;
}
else

{
this.girl = (Girl) person;
}
boolean success = this.boy.getCondition() == this.girl.getCondition();
StringBuffer info = new StringBuffer();
info.append(this.boy.getName());
info.append(" vs ");
info.append(this.girl.getName());
info.append(" is partner: " );
info.append(success);
System.out.println(info);
return success;
}
}

6.測試
package simpleMediator;

public class Test


{
public static void main(String[] args)

{
// 紅日婚介所開張
Mediator mediator = new RedSunMediator();
// 一個名為小趙的男孩,條件為2500
Boy xiaoZhao = new Boy("小趙", 2500, mediator);
mediator.registBoy(xiaoZhao);
// 一個名為小錢的女孩,條件為為2500
Girl xiaoQian = new Girl("小錢", 2500, mediator);
mediator.registGirl(xiaoQian);
// 如果條件符合,則partner成立
xiaoZhao.findPartner(xiaoQian);
// 一個名為lanlan的女孩,條件為90
Girl xiaosun = new Girl("小孫", 5000, mediator);
mediator.registGirl(xiaosun);
xiaosun.findPartner(xiaoZhao);
}
}

總結
中介者模式很容易在系統中應用,也很容易在系統中誤用。當系統出現了“多對多”交互復雜的對象群,不要急于使用中介者模式,而要先反思你的系統在設計上是不是合理。