版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、行為型模式-中介者模式本章教學(xué)內(nèi)容n中介者模式 模式動(dòng)機(jī)與定義 模式結(jié)構(gòu)與分析 模式實(shí)例與解析 模式效果與應(yīng)用 模式擴(kuò)展中介者模式n模式動(dòng)機(jī)中介者模式n模式動(dòng)機(jī)在用戶與用戶直接聊天的設(shè)計(jì)方案中,用戶對(duì)象之間存在很強(qiáng)的關(guān)聯(lián)性,將導(dǎo)致系統(tǒng)出現(xiàn)如下問題:系統(tǒng)結(jié)構(gòu)復(fù)雜:對(duì)象之間存在大量的相互關(guān)聯(lián)和調(diào)用,若有一個(gè)對(duì)象發(fā)生變化,則需要跟蹤和該對(duì)象關(guān)聯(lián)的其他所有對(duì)象,并進(jìn)行適當(dāng)處理。對(duì)象可重用性差:由于一個(gè)對(duì)象和其他對(duì)象具有很強(qiáng)的關(guān)聯(lián),若沒有其他對(duì)象的支持,一個(gè)對(duì)象很難被另一個(gè)系統(tǒng)或模塊重用,這些對(duì)象表現(xiàn)出來更像一個(gè)不可分割的整體,職責(zé)較為混亂。系統(tǒng)擴(kuò)展性低:增加一個(gè)新的對(duì)象需要在原有相關(guān)對(duì)象上增加引用,增
2、加新的引用關(guān)系也需要調(diào)整原有對(duì)象,系統(tǒng)耦合度很高,對(duì)象操作很不靈活,擴(kuò)展性差。中介者模式n模式動(dòng)機(jī)在面向?qū)ο蟮能浖O(shè)計(jì)與開發(fā)過程中,根據(jù)“單一職責(zé)原則”,我們應(yīng)該盡量將對(duì)象細(xì)化,使其只負(fù)責(zé)或呈現(xiàn)單一的職責(zé)。對(duì)于一個(gè)模塊,可能由很多對(duì)象構(gòu)成,而且這些對(duì)象之間可能存在相互的引用,為了減少對(duì)象兩兩之間復(fù)雜的引用關(guān)系,使之成為一個(gè)松耦合的系統(tǒng),我們需要使用中介者模式,這就是中介者模式的模式動(dòng)機(jī)。中介者模式n模式定義中介者模式(Mediator Pattern)定義:用一個(gè)中介對(duì)象來封裝一系列的對(duì)象交互,中介者使各對(duì)象不需要顯式地相互引用,從而使其耦合松散,而且可以獨(dú)立地改變它們之間的交互。中介者模式又
3、稱為調(diào)停者模式,它是一種對(duì)象行為型模式。中介者模式n模式定義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: medium low中介者模式n模式結(jié)構(gòu)m
4、ediatorMediatorColleagueConcreteColleagueAConcreteColleagueBConcreteMediator中介者模式n模式結(jié)構(gòu)中介者模式包含如下角色:Mediator: 抽象中介者ConcreteMediator: 具體中介者Colleague: 抽象同事類ConcreteColleague: 具體同事類中介者模式n模式分析中介者模式可以使對(duì)象之間的關(guān)系數(shù)量急劇減少:中介者模式n模式分析中介者承擔(dān)兩方面的職責(zé):中轉(zhuǎn)作用(結(jié)構(gòu)性):通過中介者提供的中轉(zhuǎn)作用,各個(gè)同事對(duì)象就不再需要顯式引用其他同事,當(dāng)需要和其他同事進(jìn)行通信時(shí),通過中介者即可。該中轉(zhuǎn)作用
5、屬于中介者在結(jié)構(gòu)上的支持。協(xié)調(diào)作用(行為性):中介者可以更進(jìn)一步的對(duì)同事之間的關(guān)系進(jìn)行封裝,同事可以一致地和中介者進(jìn)行交互,而不需要指明中介者需要具體怎么做,中介者根據(jù)封裝在自身內(nèi)部的協(xié)調(diào)邏輯,對(duì)同事的請(qǐng)求進(jìn)行進(jìn)一步處理,將同事成員之間的關(guān)系行為進(jìn)行分離和封裝。該協(xié)調(diào)作用屬于中介者在行為上的支持。中介者模式n模式分析典型的抽象中介者類代碼:public abstract class Mediatorprotected ArrayList colleagues;public void register(Colleague colleague)colleagues.add(colleague);p
6、ublic abstract void operation();中介者模式n模式分析典型的具體中介者類代碼:public class ConcreteMediator extends Mediatorpublic void operation().(Colleague)(colleagues.get(0).method1();. 中介者模式n模式分析典型的抽象同事類代碼:public abstract class Colleagueprotected Mediator mediator;public Colleague(Mediator mediator)this.mediator=media
7、tor;public abstract void method1();public abstract void method2(); 中介者模式n模式分析典型的具體同事類代碼:public class ConcreteColleague extends Colleaguepublic ConcreteColleague(Mediator mediator)super(mediator);public void method1().public void method2()mediator.operation1(); 中介者模式n中介者模式實(shí)例與解析實(shí)例:虛擬聊天室某論壇系統(tǒng)欲增加一個(gè)虛擬聊天室
8、,允許論壇會(huì)員通過該聊天室進(jìn)行信息交流,普通會(huì)員(CommonMember)可以給其他會(huì)員發(fā)送文本信息,鉆石會(huì)員(DiamondMember)既可以給其他會(huì)員發(fā)送文本信息,還可以發(fā)送圖片信息。該聊天室可以對(duì)暴力字符進(jìn)行過濾,如“殺”等字符;還可以對(duì)發(fā)送的圖片大小進(jìn)行控制。用中介者模式設(shè)計(jì)該虛擬聊天室。中介者模式n中介者模式實(shí)例與解析實(shí)例:虛擬聊天室1.10.*chatroomAbstractChatroomabstract +register (Member member)sendText (String from, String to, String message)sendImage (S
9、tring from, String to, String image): void: void: voidMember#chatroomname: AbstractChatroom: String+ChatMember (String name)getName ()setName (String name)getChatroom ()setChatroom (AbstractChatroom chatroom)sendText (String to, String message)sendImage (String to, String image)receiveText (String f
10、rom, String message)receiveImage (String from, String image): String: void: AbstractChatroom: void: void: void: void: voidDiamondMember+DiamondMember (String name)sendText (String to, String message)sendImage (String to, String image): void: voidCommonMember+CommonMember (String name)sendText (Strin
11、g to, String message)sendImage (String to, String image).: void: voidChatGroup- member : Hashtable+register (Member member)sendText (String from, String to, String message)sendImage (String from, String to, String image): void: void: void中介者模式n模式優(yōu)缺點(diǎn)中介者模式的優(yōu)點(diǎn)簡(jiǎn)化了對(duì)象之間的交互。將各同事解耦。減少子類生成??梢院?jiǎn)化各同事類的設(shè)計(jì)和實(shí)現(xiàn)。中介者
12、模式n模式優(yōu)缺點(diǎn)中介者模式的缺點(diǎn)在具體中介者類中包含了同事之間的交互細(xì)節(jié),可能會(huì)導(dǎo)致具體中介者類非常復(fù)雜,使得系統(tǒng)難以維護(hù)。中介者模式n模式適用環(huán)境在以下情況下可以使用中介者模式:系統(tǒng)中對(duì)象之間存在復(fù)雜的引用關(guān)系,產(chǎn)生的相互依賴關(guān)系結(jié)構(gòu)混亂且難以理解。一個(gè)對(duì)象由于引用了其他很多對(duì)象并且直接和這些對(duì)象通信,導(dǎo)致難以復(fù)用該對(duì)象。想通過一個(gè)中間類來封裝多個(gè)類中的行為,而又不想生成太多的子類。可以通過引入中介者類來實(shí)現(xiàn),在中介者中定義對(duì)象交互的公共行為,如果需要改變行為則可以增加新的中介者類。中介者模式n模式應(yīng)用(1) 中介者模式在事件驅(qū)動(dòng)類軟件中應(yīng)用比較多,在設(shè)計(jì)GUI應(yīng)用程序時(shí),組件之間可能存在較
13、為復(fù)雜的交互關(guān)系,一個(gè)組件的改變將影響與之相關(guān)的其他組件,此時(shí)可以使用中介者模式來對(duì)組件進(jìn)行協(xié)調(diào)。 (2) MVC 是Java EE 的一個(gè)基本模式,此時(shí)控制器Controller 作為一種中介者,它負(fù)責(zé)控制視圖對(duì)象View和模型對(duì)象Model之間的交互。如在Struts中,Action就可以作為JSP頁(yè)面與業(yè)務(wù)對(duì)象之間的中介者。中介者模式n模式擴(kuò)展中介者模式與迪米特法則在中介者模式中,通過創(chuàng)造出一個(gè)中介者對(duì)象,將系統(tǒng)中有關(guān)的對(duì)象所引用的其他對(duì)象數(shù)目減少到最少,使得一個(gè)對(duì)象與其同事之間的相互作用被這個(gè)對(duì)象與中介者對(duì)象之間的相互作用所取代。因此,中介者模式就是迪米特法則的一個(gè)典型應(yīng)用。中介者模式
14、n模式擴(kuò)展中介者模式與GUI開發(fā) 中介者模式可以方便地應(yīng)用于圖形界面(GUI)開發(fā)中,在比較復(fù)雜的界面中可能存在多個(gè)界面組件之間的交互關(guān)系。對(duì)于這些復(fù)雜的交互關(guān)系,有時(shí)候我們可以引入一個(gè)中介者類,將這些交互的組件作為具體的同事類,將它們之間的引用和控制關(guān)系交由中介者負(fù)責(zé),在一定程度上簡(jiǎn)化系統(tǒng)的交互,這也是中介者模式的常見應(yīng)用之一。 本章小結(jié)n中介者模式用一個(gè)中介對(duì)象來封裝一系列的對(duì)象交互,中介者使各對(duì)象不需要顯式地相互引用,從而使其耦合松散,而且可以獨(dú)立地改變它們之間的交互。中介者模式又稱為調(diào)停者模式,它是一種對(duì)象行為型模式。n中介者模式包含四個(gè)角色:抽象中介者用于定義一個(gè)接口,該接口用于與各
15、同事對(duì)象之間的通信;具體中介者是抽象中介者的子類,通過協(xié)調(diào)各個(gè)同事對(duì)象來實(shí)現(xiàn)協(xié)作行為,了解并維護(hù)它的各個(gè)同事對(duì)象的引用;抽象同事類定義各同事的公有方法;具體同事類是抽象同事類的子類,每一個(gè)同事對(duì)象都引用一個(gè)中介者對(duì)象;每一個(gè)同事對(duì)象在需要和其他同事對(duì)象通信時(shí),先與中介者通信,通過中介者來間接完成與其他同事類的通信;在具體同事類中實(shí)現(xiàn)了在抽象同事類中定義的方法。本章小結(jié)n通過引入中介者對(duì)象,可以將系統(tǒng)的網(wǎng)狀結(jié)構(gòu)變成以中介者為中心的星形結(jié)構(gòu),中介者承擔(dān)了中轉(zhuǎn)作用和協(xié)調(diào)作用。中介者類是中介者模式的核心,它對(duì)整個(gè)系統(tǒng)進(jìn)行控制和協(xié)調(diào),簡(jiǎn)化了對(duì)象之間的交互,還可以對(duì)對(duì)象間的交互進(jìn)行進(jìn)一步的控制。n中介者模式的主要優(yōu)點(diǎn)在于簡(jiǎn)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度建筑工地臨時(shí)用工人員工資支付與爭(zhēng)議調(diào)解協(xié)議3篇
- 應(yīng)急管理概論 教學(xué)大綱
- 企業(yè)流程管理培訓(xùn)
- 二零二五年度廣告銷售渠道拓展合同范本3篇
- ChatGPT助推學(xué)校教育數(shù)字化轉(zhuǎn)型-人工智能時(shí)代學(xué)什么與怎么教
- 航空母艦發(fā)展史
- 炒菜放料知識(shí)培訓(xùn)課件
- 山西省朔州市懷仁市2024-2025學(xué)年七年級(jí)上學(xué)期1月期末生物試題(無答案)
- Unit6 Shopping A let's spell (說課稿)-2023-2024學(xué)年人教PEP版英語(yǔ)四年級(jí)下冊(cè)
- 第16章 分式 評(píng)估測(cè)試卷(含答案)2024-2025學(xué)年數(shù)學(xué)華東師大版八年級(jí)下冊(cè)
- 2024年個(gè)人汽車抵押借款合同范本(四篇)
- 春聯(lián)課件教學(xué)課件
- 北師大版五年級(jí)上冊(cè)脫式計(jì)算400道及答案
- 安徽省蕪湖市2023-2024學(xué)年高一上學(xué)期期末考試 地理試題
- 8《美麗文字 民族瑰寶》教學(xué)設(shè)計(jì)2023-2024學(xué)年統(tǒng)編版道德與法治五年級(jí)上冊(cè)
- 2024年工業(yè)廢水處理工(初級(jí))技能鑒定考試題庫(kù)(含答案)
- 2024新滬教版英語(yǔ)初一上單詞表(英譯漢)
- NB/T 11446-2023煤礦連采連充技術(shù)要求
- 人教版八年級(jí)上冊(cè)生物期末必刷15道識(shí)圖題
- SY-T 6966-2023 輸油氣管道工程安全儀表系統(tǒng)設(shè)計(jì)規(guī)范
- 學(xué)生公寓管理員培訓(xùn)
評(píng)論
0/150
提交評(píng)論