目录
0、定义
1、中介者模式的四种角色
2、中介者模式的UML类图
3、示例代码
0、定义
用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显示地相互引用,从而使其耦合松散,而且可以独立地改变他们之间的交互。
1、中介者模式的四种角色
- 中介者(Mediator):中介者是一个接口,该接口定义了用于同事(colleague)对象之间进行通信的方法。
- 具体中介者(ConcreteMediator):具体中介者是实现中介者接口的类。具体中介者需要包含所有具体同事(ConcreteColleague)的引用,并通过实现中介者接口中的方法来满足具体同事之间的通信请求。
- 同事(Colleague):一个接口,规定了具体同事需要实现的方法。
- 具体同事(ConcreteColleague):实现同事接口的类。具体同事需要包含具体中介者的引用,一个具体同事需要和其他具体同事交互时,只需将自己的请求通知给它所包含的具体中介者即可。
2、中介者模式的UML类图
3、示例代码
同事
package xyz.jangle.design.mediator;
/*** 同事* @author Administrator**/
public interface Colleague {/*** 发送消息* @param mess*/public void giveMess(String mess);/*** 接收消息* @param mess*/public void receiverMess(String mess);}
中介者
package xyz.jangle.design.mediator;
/*** 中介者* @author Administrator**/
public interface Mediator {/*** 注册同事* @param colleague*/public void registerColleague(Colleague colleague);/*** 传递消息* @param colleague* @param mess*/public void deliverMess(Colleague colleague,String mess);}
具体中介者
package xyz.jangle.design.mediator;import java.util.ArrayList;
import java.util.List;
/*** 具体中介者* @author Administrator**/
public class ConcreteMediator implements Mediator{List<Colleague> list = new ArrayList<Colleague>();@Overridepublic void registerColleague(Colleague colleague) {list.add(colleague);}@Overridepublic void deliverMess(Colleague colleague, String mess) {for(Colleague coll:list) {if(coll != colleague) { //排除自己coll.receiverMess(mess);}}}}
具体同事1
package xyz.jangle.design.mediator;
/*** 具体同事* @author Administrator**/
public class ConcreteColleague1 implements Colleague {Mediator mediator;public ConcreteColleague1(Mediator mediator) {super();this.mediator = mediator;mediator.registerColleague(this);}@Overridepublic void giveMess(String mess) {mediator.deliverMess(this, mess);}@Overridepublic void receiverMess(String mess) {System.out.println("ConcreteColleague1收到消息:"+mess);}}
具体同事2
package xyz.jangle.design.mediator;
/*** 具体同事* @author Administrator**/
public class ConcreteColleague2 implements Colleague {Mediator mediator;public ConcreteColleague2(Mediator mediator) {super();this.mediator = mediator;mediator.registerColleague(this);}@Overridepublic void giveMess(String mess) {mediator.deliverMess(this, mess);}@Overridepublic void receiverMess(String mess) {System.out.println("ConcreteColleague2收到消息:"+mess);}}
客户端(使用)
package xyz.jangle.design.mediator;public class AppMain12 {public static void main(String[] args) {Mediator mediator = new ConcreteMediator(); //创建具体中介者Colleague colleague1 = new ConcreteColleague1(mediator); //创建同事1Colleague colleague2 = new ConcreteColleague2(mediator); //创建同事2colleague1.giveMess("hello 123"); //同事1发送消息给其他同事colleague2.giveMess("hello 321"); //同事2发送消息给其他同事}}
执行结果
ConcreteColleague2收到消息:hello 123
ConcreteColleague1收到消息:hello 321