免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費(fèi)電子書(shū)等14項(xiàng)超值服

開(kāi)通VIP
中介者模式

中介者模式(Mediator Pattern),又稱(chēng)調(diào)停者模式,是行為類(lèi)模式的一種。

定義

用一個(gè)中介對(duì)象封裝一系列的對(duì)象交互,中介者使各對(duì)象不需要顯示地相互作用,從而使其耦合松散,而且可以獨(dú)立地改變他們的交互。

類(lèi)圖及組成

  1. 抽象中介者:定義好同事類(lèi)對(duì)象到中介者對(duì)象的接口,用于各個(gè)同事類(lèi)之間的通信。一般包括一個(gè)或幾個(gè)抽象的事件方法,并由子類(lèi)去實(shí)現(xiàn)。
  2. 中介者實(shí)現(xiàn)類(lèi):從抽象中介者繼承而來(lái),實(shí)現(xiàn)抽象中介者中定義的事件方法。從一個(gè)同事類(lèi)接收消息,然后通過(guò)消息影響其他同時(shí)類(lèi)。
  3. 同事類(lèi)
  4. 同事類(lèi)實(shí)現(xiàn)類(lèi):如果一個(gè)對(duì)象會(huì)影響其他的對(duì)象,同時(shí)也會(huì)被其他對(duì)象影響,那么這兩個(gè)對(duì)象稱(chēng)為同事類(lèi)。同事類(lèi)一般由多個(gè)組成,他們之間相互影響,相互依賴(lài)。在中介者模式中,同事類(lèi)之間必須通過(guò)中介者才能進(jìn)行消息傳遞。

優(yōu)點(diǎn)

  1. 簡(jiǎn)化了對(duì)象之間的關(guān)系,將系統(tǒng)的各個(gè)對(duì)象之間的關(guān)系進(jìn)行封裝,將各個(gè)同事類(lèi)進(jìn)行解耦,使系統(tǒng)成為松耦合系統(tǒng)。
  2. 減少子類(lèi)的生成。
  3. 減少各同事類(lèi)的設(shè)計(jì)與實(shí)現(xiàn)。

缺點(diǎn)

由于中介者對(duì)象(中介者模式的核心)封裝了各對(duì)象間的相互關(guān)系,導(dǎo)致其變得非常復(fù)雜,系統(tǒng)維護(hù)困難。

原理

中介者模式通過(guò)中介者類(lèi)簡(jiǎn)化了系統(tǒng)的結(jié)構(gòu),將系統(tǒng)中有關(guān)對(duì)象引用的其他對(duì)象數(shù)目減到最少,將網(wǎng)狀結(jié)構(gòu)變?yōu)樾切徒Y(jié)構(gòu),中介者對(duì)象在這里起到中轉(zhuǎn)和協(xié)調(diào)作用。

中介者模式和外觀模式的區(qū)別?

  1. 中介者介于子系統(tǒng)和子系統(tǒng)之間,外觀模式介于客戶(hù)和子系統(tǒng)之間。
  2. 外觀模式將原有復(fù)雜邏輯提取到一個(gè)統(tǒng)一的接口,簡(jiǎn)化客戶(hù)端的使用。中介者模式并沒(méi)有改變客戶(hù)原有的習(xí)慣,是隱藏在邏輯后面的,使得代碼邏輯清晰可用。

注:當(dāng)系統(tǒng)中連續(xù)出現(xiàn)‘多對(duì)多’交互復(fù)雜的對(duì)象群,不要急于使用中介者模式,首先反思系統(tǒng)的設(shè)計(jì)是否合理。即使使用中介者模式時(shí)也要注意控制中介者類(lèi)的大小。

案例代碼

//抽象中介者類(lèi)public abstract class Mediator {	public abstract void send(String message, Colleague colleague);}//中介者實(shí)現(xiàn)類(lèi)public class ConcreteMediator extends Mediator {	// 需要了解所有的具體同事對(duì)象    private ConcreteColleague1 c1;    private ConcreteColleague2 c2;    public ConcreteColleague1 getC1() {	   return c1;    }    public void setC1(ConcreteColleague1 c1) {	   this.c1 = c1;    }    public ConcreteColleague2 getC2() {	   return c2;    }    public void setC2(ConcreteColleague2 c2) {	   this.c2 = c2;    }    @Override    public void send(String message, Colleague colleague) {		// 重寫(xiě)發(fā)送信息的方法,根據(jù)對(duì)象做出選擇判斷,通知對(duì)象		if (colleague == c1) {		    c2.notifyMsg(message);		} else {		    c1.notifyMsg(message);		}    }}//抽象同事類(lèi)public abstract class Colleague {	protected Mediator mediator;    public Colleague(Mediator mediator) {	    this.mediator = mediator;    }    public abstract void sendMsg(String message);        public abstract void notifyMsg(String message);}//同事類(lèi)實(shí)現(xiàn)類(lèi)public class ConcreteColleague1 extends Colleague {	public ConcreteColleague1(Mediator mediator) {	    super(mediator);    }    @Override    public void sendMsg(String message) {	   mediator.send(message, this);    }    @Override    public void notifyMsg(String message) {	   System.out.println("同事1得到消息:"   message);    }}public class ConcreteColleague2 extends Colleague {		public ConcreteColleague2(Mediator mediator) {	    super(mediator);    }    @Override    public void sendMsg(String message) {	    mediator.send(message, this);    }    @Override    public void notifyMsg(String message) {	   System.out.println("同事2得到消息:"   message);    }}-------------------------------------------------------------------------------------
來(lái)源:http://www.icode9.com/content-4-215351.html
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶(hù)發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
深入淺出中介者模式
【C#設(shè)計(jì)模式-外觀模式】
大話設(shè)計(jì)模式、UML、設(shè)計(jì)模式Java版完全總結(jié)
設(shè)計(jì)模式-結(jié)構(gòu)型模式總結(jié)
深入淺出外觀模式(一)
結(jié)構(gòu)型設(shè)計(jì)模式(下)
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服