學(xué)習(xí)《Android 源碼設(shè)計(jì)模式解析與實(shí)踐》系列筆記
介紹
生活中經(jīng)常能聽(tīng)到或接觸到各種“中介者”,比如買房子或者租房讲逛,可能會(huì)通過(guò)房屋中介匣摘;買二手車會(huì)有二手車中介店诗;找工作也可以通過(guò)中介。
中介者模式屬于行為型模式音榜。
定義
中介者模式包裝了一系列對(duì)象相互作用的方式庞瘸,使得這些對(duì)象不必相互明顯作用。從而使它們可以松散耦合赠叼。
使用場(chǎng)景
當(dāng)對(duì)象之間的交互操作很多且每個(gè)對(duì)象的行為操作都依賴彼此時(shí)擦囊,為防止在修改一個(gè)對(duì)象的行為時(shí),涉及修改很多其他對(duì)象的行為嘴办。
該模式主要是將對(duì)象之間的多對(duì)多的關(guān)系變成一對(duì)多的關(guān)系瞬场,即將關(guān)系網(wǎng)從網(wǎng)狀結(jié)構(gòu)簡(jiǎn)化為星形結(jié)構(gòu),降低系統(tǒng)的復(fù)雜性涧郊,提高可擴(kuò)展的作用贯被。
結(jié)構(gòu)
- Mediator : 抽象中介者,會(huì)持有同事對(duì)象的引用
- ConcreteMediator :中介者的具體實(shí)現(xiàn)
- Colleague :抽象同事類妆艘,會(huì)持有中介者引用
- ConcreteColleague : 同事類的具體實(shí)現(xiàn)
實(shí)現(xiàn)
下面就以買房為例彤灶,買方和賣方通過(guò)房屋中介進(jìn)行信息交流。
/**
* 抽象中介者批旺,會(huì)持有同事對(duì)象的引用
*/
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;
}
}
/**
* 同事抽象類幌陕,會(huì)持有中介者的引用
*/
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);
}
}
/**
* 房屋中介實(shí)現(xiàn)類
*/
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) {
// 生產(chǎn)一個(gè)中介
Mediator mediator = new LettingAgency();
// 買家
Colleague purchaser = new Purchaser(mediator);
// 賣家
Colleague vendor = new Vendor(mediator);
// 買家、賣家和中介者建立關(guān)系
mediator.setPurchaser(purchaser);
mediator.setVendor(vendor);
// 賣家和買家通過(guò)中介者進(jìn)行信息交流
purchaser.say("房主朱沃,房子我只能給50萬(wàn)苞轿,肯不肯賣?");
vendor.say("不好意思,暫時(shí)不能接受!");
}
}
賣家收到消息:房主逗物,房子我只能給50萬(wàn)搬卒,肯不肯賣?
買家收到消息:不好意思,暫時(shí)不能接受!
總結(jié)
中介者模式的運(yùn)用簡(jiǎn)化了對(duì)象之間的關(guān)系翎卓,將系統(tǒng)的各個(gè)對(duì)象之間的相互關(guān)系進(jìn)行封裝契邀,使各個(gè)同事類解耦,系統(tǒng)成為松耦合系統(tǒng)失暴。它簡(jiǎn)化了系統(tǒng)的結(jié)構(gòu)坯门,將同事間相互依賴的網(wǎng)狀結(jié)構(gòu)轉(zhuǎn)變成簡(jiǎn)單的星形結(jié)構(gòu),中介者對(duì)象在這里起到中轉(zhuǎn)和協(xié)調(diào)作用逗扒。
但是如果幾個(gè)同事類之間的依賴關(guān)系并不復(fù)雜的話古戴,中介者的加入可能會(huì)使結(jié)構(gòu)變得復(fù)雜,系統(tǒng)維護(hù)起來(lái)較為困難矩肩,所以在運(yùn)用前需要多考慮现恼。
相關(guān)文章:
設(shè)計(jì)模式整理(1) 代理模式
設(shè)計(jì)模式整理(2) 單例模式
設(shè)計(jì)模式整理(3) Builder 模式
設(shè)計(jì)模式整理(4) 原型模式
設(shè)計(jì)模式整理(5) 工廠模式
設(shè)計(jì)模式整理(6) 策略模式
設(shè)計(jì)模式整理(7) 狀態(tài)模式
設(shè)計(jì)模式整理(8) 責(zé)任鏈模式
設(shè)計(jì)模式整理(9) 觀察者模式
設(shè)計(jì)模式整理(10) 適配器模式
設(shè)計(jì)模式整理(11) 裝飾模式
設(shè)計(jì)模式整理(12) 中介者模式