設(shè)計模式-調(diào)停者_第1頁
設(shè)計模式-調(diào)停者_第2頁
設(shè)計模式-調(diào)停者_第3頁
設(shè)計模式-調(diào)停者_第4頁
設(shè)計模式-調(diào)停者_第5頁
已閱讀5頁,還剩21頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、實踐的一小步實踐的一小步 代碼質(zhì)量的一大步代碼質(zhì)量的一大步 調(diào)停者模式實踐的一小步實踐的一小步 代碼質(zhì)量的一大步代碼質(zhì)量的一大步是對象的行為模式。 包裝了一系列對象相互作用的方式,是這些對象不必相互明顯引用,從而使他們可以較松散的耦合,使得其可以彼此獨立的變化。 增加協(xié)作性(Collaboration),減少耦合度(Coupling) 體現(xiàn)了“迪米特法則(LoD)(最少知識原則)” 屬于很容易被濫用的一個設(shè)計模式 完全了解面臨的具體問題 完全了解設(shè)計模式 非常了解怎樣使用設(shè)計模式解決實際問題 要將設(shè)計模式理論與具體系統(tǒng)需求情況相結(jié)合,而不是生硬的組合和拼湊實踐的一小步實踐的一小步 代碼質(zhì)量的一

2、大步代碼質(zhì)量的一大步實踐的一小步實踐的一小步 代碼質(zhì)量的一大步代碼質(zhì)量的一大步ABCDGEFH I實踐的一小步實踐的一小步 代碼質(zhì)量的一大步代碼質(zhì)量的一大步ABCDH IFG F MediatorColleague Mediator同 事:調(diào)停者:實踐的一小步實踐的一小步 代碼質(zhì)量的一大步代碼質(zhì)量的一大步 抽象調(diào)停者(Mediator)角色: 定義出同事對象到調(diào)停者對象的接口??墒÷?具體調(diào)停者(Concrete Mediator)角色: 實現(xiàn)了抽象調(diào)停者所聲明的事件方法。具體調(diào)停者知曉所有的同事對象,并從具體同事對象接受消息,向具體同事對象發(fā)出命令 抽象同事(Colleague)角色: 定義

3、出調(diào)停者到同事對象的接口。同事對象只知道調(diào)停者,而不知道其余的同事對象 具體同事(Concrete Colleague)角色 每一個具體同事類都清楚自己在小范圍內(nèi)的行為,而不知道它在大范圍內(nèi)的目的。實踐的一小步實踐的一小步 代碼質(zhì)量的一大步代碼質(zhì)量的一大步實踐的一小步實踐的一小步 代碼質(zhì)量的一大步代碼質(zhì)量的一大步 : Colleague1 : Colleague1 : ConcreteMe. : ConcreteMe. : Colleague2 : Colleague22: colleagueChanged( )3: action( )4: action( )1: change( ) 優(yōu)點 可

4、以減少使用靜態(tài)的繼承關(guān)系,是的具體同事類可以更加容易得被復用 可以避免同事對象之間的過度耦合,使得調(diào)停者類與同事類可以相對獨立的演化 將多對多的相互作用轉(zhuǎn)換為一對多的相互作用,是的對象之間的關(guān)系更加易于維護和理解 將對象的行為和協(xié)作抽象化,把對象在小尺度的行為上與其他對象的相互作用分開 缺點 降低了同事對象的復雜性,代價是增加了調(diào)停者對象的復雜性 提供了傾斜的可擴展性和可復用性:調(diào)停者類經(jīng)常充滿了各個具體同事類的關(guān)系協(xié)調(diào)代碼,不易復用。因此,具體同事類的復用是以調(diào)停者類的不可復用為代價的實踐的一小步實踐的一小步 代碼質(zhì)量的一大步代碼質(zhì)量的一大步 不應(yīng)當在責任劃分混亂時使用 不應(yīng)當對“數(shù)據(jù)類”

5、和“方法類”使用。 封裝應(yīng)該是行為及其所涉及的狀態(tài)的封裝。不應(yīng)當將其分開。實踐的一小步實踐的一小步 代碼質(zhì)量的一大步代碼質(zhì)量的一大步實踐的一小步實踐的一小步 代碼質(zhì)量的一大步代碼質(zhì)量的一大步?jīng)]有主板,使用電腦看電影的過程實踐的一小步實踐的一小步 代碼質(zhì)量的一大步代碼質(zhì)量的一大步 加入主板之后的電腦各部件關(guān)系,如下圖所示: 例如使用電腦看電影過程的例子 /抽象同事類 package com.bankht.Mediator; public abstract class Colleague / 持有一個調(diào)停者對象 private Mediator mediator; public Colleague

6、(Mediator mediator) this.mediator = mediator; public Mediator getMediator() /獲取當前同事類對應(yīng)的調(diào)停者對象return mediator; 實踐的一小步實踐的一小步 代碼質(zhì)量的一大步代碼質(zhì)量的一大步 /具體同事類-光驅(qū) package com.bankht.Mediator; public class CDDriver extends Colleague / 光驅(qū)讀取出來的數(shù)據(jù) private String data = “”; public CDDriver(Mediator mediator) super(med

7、iator); public String getData() / 獲取光盤讀取出來的數(shù)據(jù)return data; 實踐的一小步實踐的一小步 代碼質(zhì)量的一大步代碼質(zhì)量的一大步 /* 讀取光盤*/ public void readCD() / 逗號前是視頻顯示的數(shù)據(jù),逗號后是聲音 this.data = One Piece,海賊王我當定了; / 通知主板,自己的狀態(tài)發(fā)生了改變 getMediator().changed(this); 實踐的一小步實踐的一小步 代碼質(zhì)量的一大步代碼質(zhì)量的一大步 /具體同事類-CPU package com.bankht.Mediator; public class

8、 CPU extends Colleague / 分解出來的視頻數(shù)據(jù) private String videoData = ; / 分解出來的聲音數(shù)據(jù) private String soundData = ; public CPU(Mediator mediator) super(mediator); /* 獲取分解出來的視頻數(shù)據(jù)*/ public String getVideoData() return videoData; /*實踐的一小步實踐的一小步 質(zhì)量的一大步質(zhì)量的一大步 /* 獲取分解出來的聲音數(shù)據(jù)*/ public String getSoundData() return sou

9、ndData; /* 處理數(shù)據(jù),把數(shù)據(jù)分成音頻和視頻的數(shù)據(jù)*/ public void executeData(String data) / 把數(shù)據(jù)分解開,前面是視頻數(shù)據(jù),后面是音頻數(shù)據(jù) String array = data.split(,); this.videoData = array0; this.soundData = array1; / 通知主板,CPU完成工作 getMediator().changed(this); 實踐的一小步實踐的一小步 代碼質(zhì)量的一大步代碼質(zhì)量的一大步 /具體同事類-顯卡 package com.bankht.Mediator; public class

10、VideoCard extends Colleague public VideoCard(Mediator mediator) super(mediator); /* 顯示視頻數(shù)據(jù)*/ public void showData(String data) System.out.println(您正在觀看的是: + data); 實踐的一小步實踐的一小步 代碼質(zhì)量的一大步代碼質(zhì)量的一大步 具體同事類-聲卡 package com.bankht.Mediator; public class SoundCard extends Colleague public SoundCard(Mediator m

11、ediator) super(mediator); /* 按照聲頻數(shù)據(jù)發(fā)出聲音*/ public void soundData(String data) System.out.println(畫外音: + data); 實踐的一小步實踐的一小步 代碼質(zhì)量的一大步代碼質(zhì)量的一大步 /抽象調(diào)停者package com.bankht.Mediator; public interface Mediator /* 同事對象在自身改變的時候來通知調(diào)停者方法 讓調(diào)停者去負責相應(yīng)的與其他同事對象的交互*/ public void changed(Colleague c); 實踐的一小步實踐的一小步 代碼質(zhì)量的

12、一大步代碼質(zhì)量的一大步 /具體調(diào)停者類 package com.bankht.Mediator; public class MainBoard implements Mediator / 需要知道要交互的同事類光驅(qū)類 private CDDriver cdDriver = null; / 需要知道要交互的同事類CPU類 private CPU cpu = null; / 需要知道要交互的同事類顯卡類 private VideoCard videoCard = null; / 需要知道要交互的同事類聲卡類 private SoundCard soundCard = null; public vo

13、id setCdDriver(CDDriver cdDriver) this.cdDriver = cdDriver; 實踐的一小步實踐的一小步 代碼質(zhì)量的一大步代碼質(zhì)量的一大步 public void setCpu(CPU cpu) this.cpu = cpu; public void setVideoCard(VideoCard videoCard) this.videoCard = videoCard; public void setSoundCard(SoundCard soundCard) this.soundCard = soundCard; Override public vo

14、id changed(Colleague c) if (c instanceof CDDriver) / 表示光驅(qū)讀取數(shù)據(jù)了 this.opeCDDriverReadData(CDDriver) c); else if (c instanceof CPU) this.opeCPU(CPU) c); 實踐的一小步實踐的一小步 代碼質(zhì)量的一大步代碼質(zhì)量的一大步 /* 處理光驅(qū)讀取數(shù)據(jù)以后與其他對象的交互*/ private void opeCDDriverReadData(CDDriver cd) / 先獲取光驅(qū)讀取的數(shù)據(jù) String data = cd.getData(); / 把這些數(shù)據(jù)傳遞

15、給CPU進行處理 cpu.executeData(data); private void opeCPU(CPU cpu) /處理CPU處理完數(shù)據(jù)后與其他對象的交互/ 先獲取CPU處理后的數(shù)據(jù) String videoData = cpu.getVideoData(); String soundData = cpu.getSoundData(); / 把這些數(shù)據(jù)傳遞給顯卡和聲卡展示出來 videoCard.showData(videoData); soundCard.soundData(soundData); 實踐的一小步實踐的一小步 代碼質(zhì)量的一大步代碼質(zhì)量的一大步 /客戶端程序 package com.bankht.Mediator; public class Client public static void main(String args) / 創(chuàng)建調(diào)停者主板 MainBoard mediator = new MainBoard(); / 創(chuàng)建同事類 CDDriver cd = new CDDriver(mediator); CPU cpu = new CPU(mediator); VideoCard vc = new VideoCard(mediator); SoundCard sc = new SoundCard(media

溫馨提示

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

最新文檔

評論

0/150

提交評論