学习《Android 源码设计模式解析与实践》系列笔记
介绍
生活中经常能听到或接触到各种“中介者”,比如买房子或者租房,可能会通过房屋中介;买二手车会有二手车中介;找工作也可以通过中介。
中介者模式属于行为型模式。
定义
中介者模式包装了一系列对象相互作用的方式,使得这些对象不必相互明显作用。从而使它们可以松散耦合。
使用场景
当对象之间的交互操作很多且每个对象的行为操作都依赖彼此时,为防止在修改一个对象的行为时,涉及修改很多其他对象的行为。
该模式主要是将对象之间的多对多的关系变成一对多的关系,即将关系网从网状结构简化为星形结构,降低系统的复杂性,提高可扩展的作用。
结构
- Mediator : 抽象中介者,会持有同事对象的引用
- ConcreteMediator :中介者的具体实现
- Colleague :抽象同事类,会持有中介者引用
- ConcreteColleague : 同事类的具体实现
实现
下面就以买房为例,买方和卖方通过房屋中介进行信息交流。
/**
* 抽象中介者,会持有同事对象的引用
*/
public abstract class Mediator {
protected Colleague mPurchaser; //买家
protected Colleague mVendor; //卖家
public abstract void exchangeMessage(Colleague colleague, String msg);
public void setPurchaser(Colleague mPurchaser) {
this.mPurchaser = mPurchaser;
}
public void setVendor(Colleague mVendor) {
this.mVendor = mVendor;
}
}
/**
* 同事抽象类,会持有中介者的引用
*/
public abstract class Colleague {
protected Mediator mMediator;
public Colleague(Mediator mediator) {
mMediator = mediator;
}
public abstract void getMessage(String msg);
public abstract void say(String msg);
}
/**
* 卖家
*/
public class Vendor extends Colleague {
public Vendor(Mediator mediator) {
super(mediator);
}
@Override
public void getMessage(String msg) {
System.out.println("卖家收到消息:" + msg);
}
@Override
public void say(String msg) {
mMediator.exchangeMessage(this, msg);
}
}
/**
* 买家
*/
public class Purchaser extends Colleague {
public Purchaser(Mediator mediator) {
super(mediator);
}
@Override
public void getMessage(String msg) {
System.out.println("买家收到消息:" + msg);
}
@Override
public void say(String msg) {
mMediator.exchangeMessage(this, msg);
}
}
/**
* 房屋中介实现类
*/
public class LettingAgency extends Mediator {
@Override
public void exchangeMessage(Colleague colleague, String msg) {
if (colleague == mPurchaser) {
mVendor.getMessage(msg);
} else {
mPurchaser.getMessage(msg);
}
}
}
public class Client {
public static void main(String[] args) {
// 生产一个中介
Mediator mediator = new LettingAgency();
// 买家
Colleague purchaser = new Purchaser(mediator);
// 卖家
Colleague vendor = new Vendor(mediator);
// 买家、卖家和中介者建立关系
mediator.setPurchaser(purchaser);
mediator.setVendor(vendor);
// 卖家和买家通过中介者进行信息交流
purchaser.say("房主,房子我只能给50万,肯不肯卖?");
vendor.say("不好意思,暂时不能接受!");
}
}
卖家收到消息:房主,房子我只能给50万,肯不肯卖?
买家收到消息:不好意思,暂时不能接受!
总结
中介者模式的运用简化了对象之间的关系,将系统的各个对象之间的相互关系进行封装,使各个同事类解耦,系统成为松耦合系统。它简化了系统的结构,将同事间相互依赖的网状结构转变成简单的星形结构,中介者对象在这里起到中转和协调作用。
但是如果几个同事类之间的依赖关系并不复杂的话,中介者的加入可能会使结构变得复杂,系统维护起来较为困难,所以在运用前需要多考虑。
相关文章:
设计模式整理(1) 代理模式
设计模式整理(2) 单例模式
设计模式整理(3) Builder 模式
设计模式整理(4) 原型模式
设计模式整理(5) 工厂模式
设计模式整理(6) 策略模式
设计模式整理(7) 状态模式
设计模式整理(8) 责任链模式
设计模式整理(9) 观察者模式
设计模式整理(10) 适配器模式
设计模式整理(11) 装饰模式
设计模式整理(12) 中介者模式