【导读】在信息高速发展的时代,估计很多朋友都记不住别人的号码,这个时候就需要一个“通讯录”来存储号码,这个通讯录就是中介者。
一、定义
定义一个封装一组对象如何交互的对象,这个中介对象来简化原有对象之间的交互关系,降低系统中对象间的耦合度,使原有对象之间不必互相了解。
二、实例
例如日常通信软件上都会有一个“群” 的概念,这个群就是一个中介者,有了群之后,我们不必一个一个的发信息,只需要发送信息到群上,群中的人就会收到相应的信息。
微信账号:
public class WechatCount {
private String name;
public WechatCount(String name) {
this.name = name;
}
//将发信息的步骤托付给群
public void sendMessage(String conent){
WechatGroup.sendMessage(this,conent);
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
WechatCount that = (WechatCount) o;
return name != null ? name.equals(that.name) : that.name == null;
}
@Override
public int hashCode() {
return name != null ? name.hashCode() : 0;
}
}
微信群对象:
public class WechatGroup {
1、维系了一组账号,也就是群成员
private static List<WechatCount> wechatCountList
= new ArrayList<WechatCount>();
2、进群操作
public void register(WechatCount wechatCount) {
wechatCountList.add(wechatCount);
}
3、发信息,依次通知到每个账号(除了消息发送者)
public static void sendMessage(WechatCount wechatCount,String content) {
for (WechatCount count : wechatCountList) {
if (!count.equals(wechatCount)) {
System.out.println(new Date()+" "+ wechatCount.getName()+"在微信群发送了一条消息,内容是:"+content+",接收人是:"+count.getName());
}
}
}
}
测试类:
public static void main(String[] args) throws InterruptedException {
WechatCount liusy = new WechatCount("Liusy");
WechatCount zhangsan = new WechatCount("张三");
WechatCount lisi = new WechatCount("李四");
WechatGroup wechatGroup = new WechatGroup();
wechatGroup.register(liusy);
wechatGroup.register(zhangsan);
wechatGroup.register(lisi);
zhangsan.sendMessage("早上好");
Thread.sleep(1000);
System.out.println("=====================================");
liusy.sendMessage("没人回你,好尴尬啊");
}
测试结果:
类图: