《軟件 8.ppt》為會(huì)員分享,可在線(xiàn)閱讀。更多相關(guān)《軟件架構(gòu)講座8.ppt(39頁(yè)珍藏版)》,請(qǐng)?jiān)L問(wèn)usdt平臺(tái)_搜索usdt官網(wǎng)。
1、1、軟件架構(gòu)第8講:設(shè)計(jì)模式(1、江河、2、內(nèi)容介紹、設(shè)計(jì)模式概念設(shè)計(jì)模式說(shuō)明案例:文檔編輯器Lexi Lexi的文檔結(jié)構(gòu)與組合()模式,3,設(shè)計(jì)模式概念,:“每個(gè)模式都描述了我們周?chē)磸?fù)出現(xiàn)的問(wèn)題,以及解決該問(wèn)題的核心。這樣,您可以一次又一次地使用該解決方案,而不必做重復(fù)的工作.” : - 軟件:設(shè)計(jì)模式是“對(duì)類(lèi)和對(duì)象的描述,這些類(lèi)和對(duì)象之間相互通信,用于解決特定場(chǎng)景中的一般設(shè)計(jì)問(wèn)題,4、設(shè)計(jì)模式概念,設(shè)計(jì)模式的四個(gè)基本要素: 模式名稱(chēng)(Name):助記名,使用一兩個(gè)詞
2、 來(lái)描述模式的問(wèn)題、解決方案和效果。():描述何時(shí)應(yīng)該使用模式。() 描述了設(shè)計(jì)的組件,它們?nèi)绾蜗嗷リP(guān)聯(lián),以及它們各自的職責(zé)和協(xié)同工作的方式。() 描述了模式應(yīng)用的效果和使用模式的權(quán)衡,5、設(shè)計(jì)模式概念、6、設(shè)計(jì)模式描述、模式名稱(chēng)和分類(lèi)模式名稱(chēng)簡(jiǎn)潔地描述了模式的本質(zhì)。模式可以分為創(chuàng)造型、結(jié)構(gòu)型和行為型。 是一個(gè)簡(jiǎn)單的陳述,它回答了以下問(wèn)題:設(shè)計(jì)模式做什么?它的原理和意圖是什么?它解決了什么具體的設(shè)計(jì)問(wèn)題?Alias 的其他名稱(chēng),7,設(shè)計(jì)模式的描述,
3、問(wèn)題的具體上下文。此場(chǎng)景將幫助您理解對(duì)以下模式的更抽象描述。適用性 什么時(shí)候可以使用這種模式?這種模式可以用來(lái)改進(jìn)哪些糟糕的設(shè)計(jì)?您如何識(shí)別這些情況?結(jié)構(gòu)圖形化地描述了模式中的類(lèi),解釋了請(qǐng)求順序和對(duì)象之間的協(xié)作關(guān)系, 8、設(shè)計(jì)模式的描述,參與者設(shè)計(jì)模式中的各種對(duì)象、類(lèi)及其各自的職責(zé)。協(xié)作模型中的參與者如何協(xié)作以履行其職責(zé)。效果模式如何支持其目標(biāo)?使用模式的影響和需要做出的權(quán)衡?系統(tǒng)結(jié)構(gòu)的哪些方面可以獨(dú)立改變,9、設(shè)計(jì)模式的描述,實(shí)現(xiàn)實(shí)現(xiàn)模式時(shí)要知道的一些技巧,要避免的技術(shù)點(diǎn)和陷阱,以及是否存在一些特定于實(shí)現(xiàn)語(yǔ)言的問(wèn)題。在 C++/ 中實(shí)現(xiàn)此模式的代碼示例代碼
4、代碼片段。已知在實(shí)際應(yīng)用系統(tǒng)中可以找到這種模式的示例。相關(guān)模式,10,案例研究:文檔編輯器 Lexi,11,案例研究:文檔編輯器 Lexi,Lexi 設(shè)計(jì)文檔結(jié)構(gòu)中的 7 個(gè)問(wèn)題:文本的數(shù)據(jù)結(jié)構(gòu)排列。所有的編輯、格式化、顯示和文本分析都涉及到這樣的文檔結(jié)構(gòu)。格式化:Lexi 如何創(chuàng)建數(shù)據(jù)結(jié)構(gòu)?哪些對(duì)象負(fù)責(zé)不同的格式化策略?裝飾用戶(hù)界面:Lexi 的用戶(hù)界面包括滾動(dòng)條、邊框和陰影來(lái)裝飾文檔界面 可以進(jìn)行重大修改以適應(yīng)不同的視覺(jué)標(biāo)準(zhǔn)。例如,Motif 支持多個(gè)窗口系統(tǒng):不同的視覺(jué)標(biāo)準(zhǔn)通常在不同的
5、在窗口系統(tǒng)上實(shí)現(xiàn)。Lexi 應(yīng)該被設(shè)計(jì)成盡可能獨(dú)立于窗口系統(tǒng)。用戶(hù)操作:用戶(hù)通過(guò)不同的界面操作 Lexi,包括按鈕和下拉菜單。拼寫(xiě)檢查和斷字:Lexi 如何支持拼寫(xiě)檢查和確定斷字的斷字點(diǎn)等分析操作?當(dāng)我們要添加新的分析操作時(shí),如何盡量少修改相關(guān)類(lèi),13、Lexi的文檔結(jié)構(gòu)和組合()模式,Lexi其實(shí)考慮的是如何排列字符、線(xiàn)段、多邊形、圖像的基本元素, 等等。 。在使用 Lexi 的過(guò)程中,用戶(hù)想要操作的不是單個(gè)字符、行、列、表、頁(yè)等。行、列、表、頁(yè)等都是子結(jié)構(gòu),它又可以包含更小粒度的子結(jié)構(gòu)。字符、線(xiàn)段等可視為沒(méi)有子結(jié)構(gòu)的原子結(jié)構(gòu),14
6、, Lexi的文檔結(jié)構(gòu)和組合()模式, 字符, 圖片, 行, 列, 15, Lexi的文檔結(jié)構(gòu)和組合()模式, 字符和線(xiàn)段等原子結(jié)構(gòu)與一般子結(jié)構(gòu)的關(guān)系, 16字符、線(xiàn)段等原子結(jié)構(gòu)的動(dòng)作與一般子結(jié)構(gòu)的動(dòng)作基本相同:Draw 在屏幕上繪制,判斷當(dāng)前光標(biāo)是否在自身上。繼承自基類(lèi),Lexi的文檔結(jié)構(gòu)和組合()方式,17、圖元,18、字符、線(xiàn)段等原子結(jié)構(gòu)和通用子結(jié)構(gòu)都繼承自圖元。其中,row、等類(lèi)包含大量的成員變量,這些成員變量都是原語(yǔ)的實(shí)例。
7、這種通用子結(jié)構(gòu)的關(guān)系其實(shí)是()模式,Lexi的文檔結(jié)構(gòu)和()模式,19,()模式打算把對(duì)象組合成一個(gè)樹(shù)形結(jié)構(gòu)來(lái)表示“part-whole”層次結(jié)構(gòu). Lexi的文檔結(jié)構(gòu)和()模式,20、()模式動(dòng)機(jī)在圖形編輯器和圖形捕獲系統(tǒng)等應(yīng)用程序中,用戶(hù)可以使用簡(jiǎn)單的組件創(chuàng)建復(fù)雜的圖表。用戶(hù)可以將多個(gè)簡(jiǎn)單的組件組合成更大的組件,這些組件又可以組合成更大的組件。一個(gè)簡(jiǎn)單的實(shí)現(xiàn)方法是用不同的類(lèi)定義不同粒度的組件,比如word
8、符號(hào)、線(xiàn)條等簡(jiǎn)單的原語(yǔ)定義了一些類(lèi),將行和列的其他類(lèi)定義為簡(jiǎn)單原語(yǔ)的容器類(lèi)。但是用戶(hù)可能會(huì)認(rèn)為這些容器類(lèi)在使用過(guò)程中的行為與簡(jiǎn)單的原始類(lèi)相同!雖然該模式試圖解決這樣一個(gè)問(wèn)題,但它描述了如何使用遞歸組合,以便用戶(hù)不必區(qū)分這些類(lèi),如 Lexi 的文檔結(jié)構(gòu)和 () 模式所示,21,抽象基類(lèi)必須是能夠反映原子基元的特征,而基元又應(yīng)該能夠反映一般子結(jié)構(gòu)的特征,22、23、
9、) 模式,24,Lexi的文檔結(jié)構(gòu)和()模式,()模式結(jié)構(gòu),25,Lexi的文檔結(jié)構(gòu)和()模式,26,()模式,()是中的對(duì)象聲明接口在適當(dāng)?shù)那闆r下實(shí)現(xiàn)了所有類(lèi)共有的接口的默認(rèn)行為。聲明一個(gè)用于訪(fǎng)問(wèn)和管理子組件的接口。在遞歸結(jié)構(gòu)中定義一個(gè)用于訪(fǎng)問(wèn)父組件的接口。在Leaf(, Line, Text, etc.)表示組合中的葉子節(jié)點(diǎn)對(duì)象的情況下實(shí)現(xiàn)它,葉子節(jié)點(diǎn)在組合中沒(méi)有子節(jié)點(diǎn)定義原始對(duì)象Comp的行為
10、osite() 定義那些具有子組件的組件的行為。子組件在接口中實(shí)現(xiàn)與子組件相關(guān)的操作。通過(guò)接口操作復(fù)合組件的對(duì)象,Lexi 的文檔結(jié)構(gòu)使用() 模式,27,() 模式與用戶(hù)協(xié)作軟件體系結(jié)構(gòu)第二版下載,使用類(lèi)接口與復(fù)合結(jié)構(gòu)中的對(duì)象進(jìn)行交互。如果接收者是葉節(jié)點(diǎn),則直接處理請(qǐng)求。如果接收者是,那么它通常將請(qǐng)求發(fā)送到其子組件,可能在轉(zhuǎn)發(fā)請(qǐng)求之前/之后執(zhí)行一些輔助操作。Lexi的文檔結(jié)構(gòu)與()模式有關(guān),28、()模式效果定義了包含基本對(duì)
11、對(duì)象和組合對(duì)象的類(lèi)層次結(jié)構(gòu) 基本對(duì)象可以組合成更復(fù)雜的組合對(duì)象,這些組合對(duì)象又可以組合。簡(jiǎn)化的客戶(hù)端代碼 客戶(hù)端可以一致地使用復(fù)合結(jié)構(gòu)和單個(gè)對(duì)象。客戶(hù)通常不知道也不關(guān)心他們是在處理葉節(jié)點(diǎn)還是復(fù)合組件。這簡(jiǎn)化了客戶(hù)端代碼,因?yàn)椴恍枰谀切┒x組合的類(lèi)中編寫(xiě)充滿(mǎn)選擇語(yǔ)句的函數(shù)。更容易添加新類(lèi)型的組件。新定義的或 Leaf 子類(lèi)自動(dòng)與現(xiàn)有結(jié)構(gòu)和客戶(hù)端代碼一起工作,客戶(hù)端程序不需要因新類(lèi)而更改。為了讓你的設(shè)計(jì)更通用,Lexi 的文檔結(jié)構(gòu)和 () 模式,29,
12、使用共享組件最大化接口聲明管理子組件的操作應(yīng)該實(shí)現(xiàn)列表子組件排序使用緩存提高性能誰(shuí)應(yīng)該刪除存儲(chǔ)組件哪種數(shù)據(jù)結(jié)構(gòu)最好使用,Lexi的文檔和()模式,30,代碼示例 計(jì)算機(jī)和立體聲音響等設(shè)備通常組裝成部分整體層次結(jié)構(gòu)或容器層次結(jié)構(gòu)。例如,機(jī)箱可能包含驅(qū)動(dòng)器和面板,總線(xiàn)可能包含多個(gè)插件,機(jī)柜可能包含機(jī)箱、總線(xiàn)等。這個(gè)結(jié)構(gòu)可以很自然的用一個(gè)模式來(lái)模擬軟件體系結(jié)構(gòu)第二版下載,Lexi的文檔結(jié)構(gòu)和()模式,31,代碼示例類(lèi)是
13、部分-整體層次結(jié)構(gòu)中的所有設(shè)備定義一個(gè)接口。班級(jí) : (); const char* Name() _name; 瓦特功率();(); (); 無(wú)效添加(*);空白 (*); * (); : 平等
14、(const char*); : const char* _name;, Lexi的文檔結(jié)構(gòu)和()模式, 32, 代碼示例的子類(lèi)包括代表磁盤(pán)驅(qū)動(dòng)器、集成電路和交換機(jī)的Leaf類(lèi): class : : (const char*); (); 瓦特功率();(); ();,樂(lè)
15、xi的文檔結(jié)構(gòu)和()模式,33、代碼示例是一個(gè)包含其他設(shè)備的基類(lèi),也是一個(gè)子類(lèi)。班級(jí) : : (); 瓦特功率();(); (); 無(wú)效添加(*);無(wú)效(等式
16、*); * (); : (const char*); :List ;, Lexi 的文檔結(jié)構(gòu)和 () 模式, 34, 代碼示例的默認(rèn)實(shí)現(xiàn)用于累計(jì)子設(shè)備的實(shí)際價(jià)格。: () * i = (); 總計(jì) = 0;對(duì)于 (i-First();
17、!i-(); i-Next() 總計(jì) += i-()-(); 一世; total;, Lexi 的文檔結(jié)構(gòu)和() 模式, 35, Code 表示為的子類(lèi)。類(lèi): : (const char*); (); 瓦特功率();(); v
18、();,Lexi的文檔結(jié)構(gòu)和()模式,36,代碼示例采用類(lèi)似的方式來(lái)定義和Bus。這給出了組裝個(gè)人電腦所需的所有設(shè)備,Lexi 的文檔結(jié)構(gòu) 與 () 模式一樣,37 的代碼示例采用了類(lèi)似的方法來(lái)定義和 Bus。這為您提供了組裝個(gè)人計(jì)算機(jī)所需的所有設(shè)備。* = 新的(PC);* = 新的(PC);-
19、添加();總線(xiàn)* 總線(xiàn) = 新總線(xiàn)(MCA 總線(xiàn));bus-Add(new Card(16Mbs Token Ring); -Add(bus); -Add(new (3.5in ); cout () endl, Lexi 的文檔結(jié)構(gòu)和 () 模式, 38, 已知應(yīng)用-相關(guān)模式 常與模式一起使用,讓你共享組件,但不再引用其父組件,可用于遍歷本應(yīng)分布在和 Leaf 類(lèi)中的本地化操作和行為,Lexi 的文檔結(jié)構(gòu)和 () 模式, 39,謝謝