第21章中介者模式_第1頁
第21章中介者模式_第2頁
第21章中介者模式_第3頁
第21章中介者模式_第4頁
第21章中介者模式_第5頁
已閱讀5頁,還剩22頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、第21章中介者模式本章教學(xué)內(nèi)容w 中介者模式 模式動機與定義模式動機與定義 模式結(jié)構(gòu)與分析模式結(jié)構(gòu)與分析 模式實例與解析模式實例與解析 模式效果與應(yīng)用模式效果與應(yīng)用 模式擴展模式擴展中介者模式w模式動機中介者模式w 模式動機 在用戶與用戶直接聊天的設(shè)計方案中,用戶對象之間存在很強的關(guān)在用戶與用戶直接聊天的設(shè)計方案中,用戶對象之間存在很強的關(guān)聯(lián)性,將導(dǎo)致系統(tǒng)出現(xiàn)如下問題:聯(lián)性,將導(dǎo)致系統(tǒng)出現(xiàn)如下問題: 系統(tǒng)結(jié)構(gòu)復(fù)雜:對象之間存在大量的相互關(guān)聯(lián)和調(diào)用,若有一個對象發(fā)生變化,則需要跟蹤和該對象關(guān)聯(lián)的其他所有對象,并進行適當(dāng)處理。 對象可重用性差:由于一個對象和其他對象具有很強的關(guān)聯(lián),若沒有其他對象的

2、支持,一個對象很難被另一個系統(tǒng)或模塊重用,這些對象表現(xiàn)出來更像一個不可分割的整體,職責(zé)較為混亂。 系統(tǒng)擴展性低:增加一個新的對象需要在原有相關(guān)對象上增加引用,增加新的引用關(guān)系也需要調(diào)整原有對象,系統(tǒng)耦合度很高,對象操作很不靈活,擴展性差。中介者模式w模式動機在面向?qū)ο蟮能浖O(shè)計與開發(fā)過程中,根據(jù)在面向?qū)ο蟮能浖O(shè)計與開發(fā)過程中,根據(jù)“單一職責(zé)單一職責(zé)原則原則”,我們,我們應(yīng)該盡量將對象細化,使其只負責(zé)或呈現(xiàn)應(yīng)該盡量將對象細化,使其只負責(zé)或呈現(xiàn)單一的職責(zé)單一的職責(zé)。對于一個模塊,可能由很多對象構(gòu)成,而且這些對象之對于一個模塊,可能由很多對象構(gòu)成,而且這些對象之間可能存在相互的引用,間可能存在相互

3、的引用,為了減少對象兩兩之間復(fù)雜的為了減少對象兩兩之間復(fù)雜的引用關(guān)系,使之成為一個松耦合的系統(tǒng),我們需要使用引用關(guān)系,使之成為一個松耦合的系統(tǒng),我們需要使用中介者模式中介者模式,這就是中介者模式的模式動機。,這就是中介者模式的模式動機。中介者模式w 模式定義中介者模式中介者模式(Mediator Pattern)定義:用一個中介對定義:用一個中介對象來象來封裝一系列的對象交互封裝一系列的對象交互,中介者使各對象不需要顯,中介者使各對象不需要顯式地相互引用,從而式地相互引用,從而使其耦合松散使其耦合松散,而且可以,而且可以獨立地改獨立地改變它們之間的交互變它們之間的交互。中介者模式又稱為。中介者

4、模式又稱為調(diào)停者模式調(diào)停者模式,它,它是一種是一種對象行為型模式對象行為型模式。中介者模式w 模式定義Mediator Pattern: Define an object that encapsulates how a set of objects interact. Mediator promotes loose coupling by keeping objects from referring to each other explicitly, and it lets you vary their interaction independently. Frequency of use:

5、medium low中介者模式w 模式結(jié)構(gòu)mediatorMediatorColleagueConcreteColleagueAConcreteColleagueBConcreteMediator中介者模式w 模式結(jié)構(gòu)中介者模式包含如下角色:中介者模式包含如下角色: Mediator: 抽象中介者 ConcreteMediator: 具體中介者 Colleague: 抽象同事類 ConcreteColleague: 具體同事類中介者模式w 模式分析中介者模式可以使對象之間的關(guān)系數(shù)量急劇減少:中介者模式可以使對象之間的關(guān)系數(shù)量急劇減少:中介者模式w 模式分析 中介者承擔(dān)兩方面的職責(zé):中介者承擔(dān)兩

6、方面的職責(zé): 中轉(zhuǎn)作用(結(jié)構(gòu)性):通過中介者提供的中轉(zhuǎn)作用,各個同事對象就不再需要顯式引用其他同事,當(dāng)需要和其他同事進行通信時,通過中介者即可。該中轉(zhuǎn)作用屬于中介者在結(jié)構(gòu)上的支持。 協(xié)調(diào)作用(行為性):中介者可以更進一步的對同事之間的關(guān)系進行封裝,同事可以一致地和中介者進行交互,而不需要指明中介者需要具體怎么做,中介者根據(jù)封裝在自身內(nèi)部的協(xié)調(diào)邏輯,對同事的請求進行進一步處理,將同事成員之間的關(guān)系行為進行分離和封裝。該協(xié)調(diào)作用屬于中介者在行為上的支持。中介者模式w 模式分析 典型的抽象中介者類代碼:典型的抽象中介者類代碼:public abstract class Mediatorprotect

7、ed ArrayList colleagues;public void register(Colleague colleague)colleagues.add(colleague);public abstract void operation();中介者模式w 模式分析 典型的具體中介者類代碼:典型的具體中介者類代碼:public class ConcreteMediator extends Mediatorpublic void operation().(Colleague)(colleagues.get(0).method1();. 中介者模式w 模式分析 典型的抽象同事類代碼:典型的抽象

8、同事類代碼:public abstract class Colleagueprotected Mediator mediator;public Colleague(Mediator mediator)this.mediator=mediator;public abstract void method1();public abstract void method2(); 中介者模式w 模式分析 典型的具體同事類代碼:典型的具體同事類代碼:public class ConcreteColleague extends Colleaguepublic ConcreteColleague(Mediato

9、r mediator)super(mediator);public void method1().public void method2()mediator.operation1(); 中介者模式w 中介者模式實例與解析實例:虛擬聊天室實例:虛擬聊天室 某論壇系統(tǒng)欲增加一個虛擬聊天室,允許論壇會員通過該聊天室進行信息交流,普通會員(CommonMember)可以給其他會員發(fā)送文本信息,鉆石會員(DiamondMember)既可以給其他會員發(fā)送文本信息,還可以發(fā)送圖片信息。該聊天室可以對不雅字符進行過濾,如“日”等字符;還可以對發(fā)送的圖片大小進行控制。用中介者模式設(shè)計該虛擬聊天室。中介者模式w

10、中介者模式實例與解析實例:虛擬聊天室實例:虛擬聊天室1.10.*chatroomAbstractChatroomabstract +register (Member member)sendText (String from, String to, String message)sendImage (String from, String to, String image): void: void: voidMember#chatroomname: AbstractChatroom: String+ChatMember (String name)getName ()setName (String

11、 name)getChatroom ()setChatroom (AbstractChatroom chatroom)sendText (String to, String message)sendImage (String to, String image)receiveText (String from, String message)receiveImage (String from, String image): String: void: AbstractChatroom: void: void: void: void: voidDiamondMember+DiamondMember

12、 (String name)sendText (String to, String message)sendImage (String to, String image): void: voidCommonMember+CommonMember (String name)sendText (String to, String message)sendImage (String to, String image).: void: voidChatGroup- member : Hashtable+register (Member member)sendText (String from, Str

13、ing to, String message)sendImage (String from, String to, String image): void: void: void中介者模式w 中介者模式實例與解析實例:虛擬聊天室實例:虛擬聊天室 參考代碼 (Chapter 21 Mediatorsample01)演示演示中介者模式w 模式優(yōu)缺點中介者模式的優(yōu)點中介者模式的優(yōu)點 簡化了對象之間的交互。 將各同事解耦。 減少子類生成。 可以簡化各同事類的設(shè)計和實現(xiàn)。中介者模式w 模式優(yōu)缺點中介者模式的缺點中介者模式的缺點 在具體中介者類中包含了同事之間的交互細節(jié),可能會導(dǎo)致具體中介者類非常復(fù)雜,使

14、得系統(tǒng)難以維護。中介者模式w 模式適用環(huán)境在以下情況下可以使用中介者模式:在以下情況下可以使用中介者模式: 系統(tǒng)中對象之間存在復(fù)雜的引用關(guān)系,產(chǎn)生的相互依賴關(guān)系結(jié)構(gòu)混亂且難以理解。 一個對象由于引用了其他很多對象并且直接和這些對象通信,導(dǎo)致難以復(fù)用該對象。 想通過一個中間類來封裝多個類中的行為,而又不想生成太多的子類??梢酝ㄟ^引入中介者類來實現(xiàn),在中介者中定義對象交互的公共行為,如果需要改變行為則可以增加新的中介者類。中介者模式w 模式應(yīng)用 (1) 中介者模式在中介者模式在事件驅(qū)動類軟件事件驅(qū)動類軟件中應(yīng)用比較多,在設(shè)計中應(yīng)用比較多,在設(shè)計GUI應(yīng)用程序時,組件之間可能存在較為復(fù)雜的交互關(guān)系,

15、應(yīng)用程序時,組件之間可能存在較為復(fù)雜的交互關(guān)系,一個組件的改變將影響與之相關(guān)的其他組件,此時可以使用一個組件的改變將影響與之相關(guān)的其他組件,此時可以使用中介者模式來對組件進行協(xié)調(diào)。中介者模式來對組件進行協(xié)調(diào)。 (2) MVC 是是Java EE 的一個基本模式,此時的一個基本模式,此時控制器控制器Controller 作為一種中介者作為一種中介者,它負責(zé)控制視圖對象,它負責(zé)控制視圖對象View和和模型對象模型對象Model之間的交互。如在之間的交互。如在Struts中,中,Action就可以就可以作為作為JSP頁面與業(yè)務(wù)對象之間的中介者。頁面與業(yè)務(wù)對象之間的中介者。中介者模式w 模式擴展中介者

16、模式與迪米特法則中介者模式與迪米特法則 在中介者模式中,通過創(chuàng)造出一個中介者對象,將系統(tǒng)中有關(guān)的對象所引用的其他對象數(shù)目減少到最少,使得一個對象與其同事之間的相互作用被這個對象與中介者對象之間的相互作用所取代。因此,中介者模式就是迪米特法則的一個典型應(yīng)用。中介者模式w 模式擴展中介者模式與中介者模式與GUI開發(fā)開發(fā) 中介者模式可以方便地應(yīng)用于圖形界面(GUI)開發(fā)中,在比較復(fù)雜的界面中可能存在多個界面組件之間的交互關(guān)系。 對于這些復(fù)雜的交互關(guān)系,有時候我們可以引入一個中介者類,將這些交互的組件作為具體的同事類,將它們之間的引用和控制關(guān)系交由中介者負責(zé),在一定程度上簡化系統(tǒng)的交互,這也是中介者模

17、式的常見應(yīng)用之一。 本章小結(jié)w 中介者模式用一個中介對象來封裝一系列的對象交互,中介者使各對象不需要顯式地相互引用,從而使其耦合松散,而且可以獨立地改變它們之間的交互。中介者模式又稱為調(diào)停者模式,它是一種對象行為型模式。w 中介者模式包含四個角色:抽象中介者用于定義一個接口,該接口用于與各同事對象之間的通信;具體中介者是抽象中介者的子類,通過協(xié)調(diào)各個同事對象來實現(xiàn)協(xié)作行為,了解并維護它的各個同事對象的引用;抽象同事類定義各同事的公有方法;具體同事類是抽象同事類的子類,每一個同事對象都引用一個中介者對象;每一個同事對象在需要和其他同事對象通信時,先與中介者通信,通過中介者來間接完成與其他同事類的通信;在具體同事類中實現(xiàn)了在抽象同事類中定義的方法。本章小結(jié)w 通過引入中介者對象,可以將系統(tǒng)的網(wǎng)狀結(jié)構(gòu)變成以中介者為中心的星形結(jié)構(gòu),中介者承擔(dān)了中轉(zhuǎn)作用和協(xié)調(diào)作用。中介者類是中介者模式的核心,它對整個系統(tǒng)進行控制和協(xié)調(diào),簡化了對象之間的

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論