1 介绍
中介者模式提供了一个中介类,该类通常处理不同类之间的通信,并支持松耦合,使代码易于维护。
2 例子
小区居民针对物业费情况要做一个讨论,每个居民都是依赖关系,要获取对方的信息,为了减少这种耦合,可以采用中介在中间传话的方式。
2.1 中介者
//中介者
class Mediator{
//维护一个信息表
private String nowInfor="";
//获取
public String getNowInfor() {
return nowInfor;
}
//添加信息
public void add(String s){
this.nowInfor=this.nowInfor+"|"+s;
}
}
2.2 住户抽象
interface Household{
//听中介说别人的情况
void listen();
//表达自己的意见
void say();
}
每一个住户都要听要说。
2.3 住户实体
//小王
class Xiaowang implements Household {
Mediator mediator;
Xiaowang(Mediator mediator) {
this.mediator = mediator;
}
@Override
public void listen() {
System.out.println("小王获取的信息:" + mediator.getNowInfor());
}
@Override
public void say() {
mediator.add("小王说物业费太贵了");
}
}
//老钱
class Laoqian implements Household {
Mediator mediator;
Laoqian(Mediator mediator) {
this.mediator = mediator;
}
@Override
public void listen() {
System.out.println("老钱获取的信息:" + mediator.getNowInfor());
}
@Override
public void say() {
mediator.add("老钱说物业费可以接受");
}
}
//刘姐
class Liujie implements Household {
Mediator mediator;
Liujie(Mediator mediator) {
this.mediator = mediator;
}
@Override
public void listen() {
System.out.println("刘姐获取的信息:" + mediator.getNowInfor());
}
@Override
public void say() {
mediator.add("刘姐说物业费每个人都应该交");
}
}
2.4 测试主类
public class Main {
public static void main(String[] args) {
//创建一个中介者
Mediator mediator = new Mediator();
//创建三个住户
Household xiaowang = new Xiaowang(mediator);
Household liujie = new Liujie(mediator);
Household laoqian = new Laoqian(mediator);
//中介上门依次获得意见
xiaowang.listen();
xiaowang.say();
liujie.listen();
liujie.say();
laoqian.listen();
laoqian.say();
}
}
运行结果:
小王获取的信息:
刘姐获取的信息:|小王说物业费太贵了
老钱获取的信息:|小王说物业费太贵了|刘姐说物业费每个人都应该交
3 总结
中介者模式关键就是一个中介者在各个对象之间穿梭,这个中介者一般是聚合到对象中的,可以根据具体的逻辑在中介者对象里面编写实现,比如投票、捐款等等。