µ÷Í£ÕßģʽÊǶÔÏóµÄÐÐΪģʽ¡£µ÷Í£Õßģʽ°ü×°ÁËһϵÁжÔÏóÏ໥×÷Óõķ½Ê½£¬Ê¹µÃÕâЩ¶ÔÏó²»±ØÏ໥Ã÷ÏÔÒýÓᣴӶøÊ¹ËüÃÇ¿ÉÒÔ½ÏËÉÉ¢µØñîºÏ¡£µ±ÕâЩ¶ÔÏóÖеÄijЩ¶ÔÏóÖ®¼äµÄÏ໥×÷Ó÷¢Éú¸Ä±äʱ£¬²»»áÁ¢¼´Ó°Ïìµ½ÆäËûµÄһЩ¶ÔÏóÖ®¼äµÄÏ໥×÷ÓᣴӶø±£Ö¤ÕâЩÏ໥×÷ÓÿÉÒԱ˴˶ÀÁ¢µØ±ä»¯¡£
ΪʲôÐèÒªµ÷Í£Õß
¡¡¡¡ÈçÏÂͼËùʾ£¬Õâ¸öʾÒâͼÖÐÓдóÁ¿µÄ¶ÔÏó£¬ÕâЩ¶ÔÏó¼È»áÓ°Ïì±ðµÄ¶ÔÏó£¬Óֻᱻ±ðµÄ¶ÔÏóËùÓ°Ï죬Òò´Ë³£³£½Ð×öͬÊÂ(Colleague)¶ÔÏó¡£ÕâЩͬʶÔÏóͨ¹ý±Ë´ËµÄÏ໥×÷ÓÃÐγÉϵͳµÄÐÐΪ¡£´ÓͼÖпÉÒÔ¿´³ö£¬¼¸ºõÿһ¸ö¶ÔÏó¶¼ÐèÒªÓëÆäËûµÄ¶ÔÏó·¢ÉúÏ໥×÷Ó㬶øÕâÖÖÏ໥×÷ÓñíÏÖΪһ¸ö¶ÔÏóÓëÁíÒ»¸ö¶ÔÏóµÄÖ±½ÓñîºÏ¡£Õâ¾ÍÊǹý¶ÈñîºÏµÄϵͳ¡£

¡¡¡¡Í¨¹ýÒýÈëµ÷Í£Õß¶ÔÏó(Mediator)£¬¿ÉÒÔ½«ÏµÍ³µÄÍø×´½á¹¹±ä³ÉÒÔÖнéÕßΪÖÐÐĵÄÐÇÐνṹ£¬ÈçÏÂͼËùʾ¡£ÔÚÕâ¸öÐÇÐνṹÖУ¬Í¬Ê¶ÔÏó²»ÔÙͨ¹ýÖ±½ÓµÄÁªÏµÓëÁíÒ»¸ö¶ÔÏó·¢ÉúÏ໥×÷Óã»Ïà·´µÄ£¬Ëüͨ¹ýµ÷Í£Õß¶ÔÏóÓëÁíÒ»¸ö¶ÔÏó·¢ÉúÏ໥×÷Óᣵ÷Í£Õß¶ÔÏóµÄ´æÔÚ±£Ö¤Á˶ÔÏó½á¹¹ÉϵÄÎȶ¨£¬Ò²¾ÍÊÇ˵£¬ÏµÍ³µÄ½á¹¹²»»áÒòΪжÔÏóµÄÒýÈëÔì³É´óÁ¿µÄÐ޸Ť×÷¡£

¡¡¡¡Ò»¸öºÃµÄÃæÏò¶ÔÏóµÄÉè¼Æ¿ÉÒÔʹ¶ÔÏóÖ®¼äÔö¼ÓÐ×÷ÐÔ(Collaboration)£¬¼õÉÙñîºÏ¶È(Couping)¡£Ò»¸öÉî˼ÊìÂǵÄÉè¼Æ»á°ÑÒ»¸öϵͳ·Ö½âΪһȺÏ໥Ð×÷µÄͬʶÔÏó£¬È»ºó¸øÃ¿Ò»¸öͬʶÔÏóÒÔ¶ÀÌØµÄÔðÈΣ¬Ç¡µ±µÄÅäÖÃËüÃÇÖ®¼äµÄÐ×÷¹ØÏµ£¬Ê¹ËüÃÇ¿ÉÒÔÔÚÒ»Æð¹¤×÷¡£
Èç¹ûûÓÐÖ÷°å
¡¡¡¡´ó¼Ò¶¼ÖªµÀ£¬µçÄÔÀïÃæ¸÷¸öÅä¼þÖ®¼äµÄ½»»¥£¬Ö÷ÒªÊÇͨ¹ýÖ÷°åÀ´Íê³ÉµÄ¡£Èç¹ûµçÄÔÀïÃæÃ»ÓÐÁËÖ÷°å£¬ÄÇô¸÷¸öÅä¼þÖ®¼ä¾Í±ØÐë×ÔÐÐÏ໥½»»¥£¬ÒÔ»¥Ïà´«ËÍÊý¾Ý¡£¶øÇÒÓÉÓÚ¸÷¸öÅä¼þµÄ½Ó¿Ú²»Í¬£¬Ï໥֮¼ä½»»¥Ê±£¬»¹±ØÐë°ÑÊý¾Ý½Ó¿Ú½øÐÐת»»²ÅÄÜÆ¥ÅäÉÏ¡£

¡¡ËùÐÒÊÇÓÐÁËÖ÷°å£¬¸÷¸öÅä¼þµÄ½»»¥Íêȫͨ¹ýÖ÷°åÀ´Íê³É£¬Ã¿¸öÅä¼þ¶¼Ö»ÐèÒªºÍÖ÷°å½»»¥£¬¶øÖ÷°åÖªµÀÈçºÎ¸úËùÓеÄÅä¼þ´ò½»µÀ£¬ÕâÑù¾Í¼òµ¥¶àÁË¡£

µ÷Í£ÕßģʽµÄ½á¹¹
¡¡¡¡µ÷Í£ÕßģʽµÄʾÒâÐÔÀàͼÈçÏÂËùʾ£º
¡¡¡¡µ÷Í£Õßģʽ°üÀ¨ÒÔ

ϽÇÉ«£º
¡¡¡¡¡ñ¡¡¡¡³éÏóµ÷Í£Õß(Mediator)½ÇÉ«£º¶¨Òå³öͬʶÔÏóµ½µ÷Í£Õß¶ÔÏóµÄ½Ó¿Ú£¬ÆäÖÐÖ÷Òª·½·¨ÊÇÒ»¸ö£¨»ò¶à¸ö£©Ê¼þ·½·¨¡£
¡¡¡¡¡ñ¡¡¡¡¾ßÌåµ÷Í£Õß(ConcreteMediator)½ÇÉ«£ºÊµÏÖÁ˳éÏóµ÷Í£ÕßËùÉùÃ÷µÄʼþ·½·¨¡£¾ßÌåµ÷Í£ÕßÖªÏþËùÓеľßÌåͬÊÂÀ࣬²¢¸ºÔð¾ßÌåµÄе÷¸÷ͬʶÔÏóµÄ½»»¥¹ØÏµ¡£
¡¡¡¡¡ñ¡¡¡¡³éÏóͬÊÂÀà(Colleague)½ÇÉ«£º¶¨Òå³öµ÷Í£Õßµ½Í¬Ê¶ÔÏóµÄ½Ó¿Ú¡£Í¬Ê¶ÔÏóÖ»ÖªµÀµ÷Í£Õß¶ø²»ÖªµÀÆäÓàµÄͬʶÔÏó¡£
¡¡¡¡¡ñ¡¡¡¡¾ßÌåͬÊÂÀà(ConcreteColleague)½ÇÉ«£ºËùÓеľßÌåͬÊÂÀà¾ù´Ó³éÏóͬÊÂÀà¼Ì³Ð¶øÀ´¡£ÊµÏÖ×Ô¼ºµÄÒµÎñ£¬ÔÚÐèÒªÓëÆäËûͬÊÂͨÐŵÄʱºò£¬¾ÍÓë³ÖÓеĵ÷Í£ÕßͨÐÅ£¬µ÷Í£Õ߻ḺÔðÓëÆäËûµÄͬʽ»»¥¡£
¡¡¡¡Ô´´úÂë
¡¡¡¡³éÏóµ÷Í£ÕßÀà
[java]
public interface Mediator {
/**
* ͬʶÔÏóÔÚ×ÔÉí¸Ä±äµÄʱºòÀ´Í¨Öªµ÷Í£Õß·½·¨
* Èõ÷Í£ÕßÈ¥¸ºÔðÏàÓ¦µÄÓëÆäËûͬʶÔÏóµÄ½»»¥
*/
public void changed(Colleague c);
}
public interface Mediator {
/**
* ͬʶÔÏóÔÚ×ÔÉí¸Ä±äµÄʱºòÀ´Í¨Öªµ÷Í£Õß·½·¨
* Èõ÷Í£ÕßÈ¥¸ºÔðÏàÓ¦µÄÓëÆäËûͬʶÔÏóµÄ½»»¥
*/
public void changed(Colleague c);
}
¡¡¡¡¾ßÌåµ÷Í£ÕßÀà
[java]
public class ConcreteMediator implements Mediator {
//³ÖÓв¢Î¬»¤Í¬ÊÂA
private ConcreteColleagueA colleagueA;
//³ÖÓв¢Î¬»¤Í¬ÊÂB
private ConcreteColleagueB colleagueB;
public void setColleagueA(ConcreteColleagueA colleagueA) {
this.colleagueA = colleagueA;
}
public void setColleagueB(ConcreteColleagueB colleagueB) {
this.colleagueB = colleagueB;
}
@Override
public void changed(Colleague c) {
/**
* ijһ¸öͬÊÂÀà·¢ÉúÁ˱仯£¬Í¨³£ÐèÒªÓëÆäËûͬʽ»»¥
* ¾ßÌåе÷ÏàÓ¦µÄͬʶÔÏóÀ´ÊµÏÖÐ×÷ÐÐΪ
*/
}
}
public class ConcreteMediator implements Mediator {
//³ÖÓв¢Î¬»¤Í¬ÊÂA
private ConcreteColleagueA colleagueA;
//³ÖÓв¢Î¬»¤Í¬ÊÂB
private ConcreteColleagueB colleagueB;
public void setColleagueA(ConcreteColleagueA colleagueA) {
this.colleagueA = colleagueA;
}
public void setColleagueB(ConcreteColleagueB colleagueB) {
this.colleagueB = colleagueB;
}
@Override
public void changed(Colleague c) {
/**
* ijһ¸öͬÊÂÀà·¢ÉúÁ˱仯£¬Í¨³£ÐèÒªÓëÆäËûͬʽ»»¥
* ¾ßÌåе÷ÏàÓ¦µÄͬʶÔÏóÀ´ÊµÏÖÐ×÷ÐÐΪ
*/
}
}
¡¡¡¡³éÏóͬÊÂÀà
[java]
public abstract class Colleague {
//³ÖÓÐÒ»¸öµ÷Í£Õß¶ÔÏó
private Mediator mediator;
/**
* ¹¹Ô캯Êý
*/
public Colleague(Mediator mediator){
this.mediator = mediator;
}
/**
* »ñÈ¡µ±Ç°Í¬ÊÂÀà¶ÔÓ¦µÄµ÷Í£Õß¶ÔÏó
*/
public Mediator getMediator() {
return mediator;
}
}
public abstract class Colleague {
//³ÖÓÐÒ»¸öµ÷Í£Õß¶ÔÏó
private Mediator mediator;
/**
* ¹¹Ô캯Êý
*/
public Colleague(Mediator mediator){
this.mediator = mediator;
}
/**
* »ñÈ¡µ±Ç°Í¬ÊÂÀà¶ÔÓ¦µÄµ÷Í£Õß¶ÔÏó
*/
public Mediator getMediator() {
return mediator;
}
}
¡¡¡¡¾ßÌåͬÊÂÀà
[java]
public class ConcreteColleagueA extends Colleague {
public ConcreteColleagueA(Media