軟件體系結(jié)構(gòu)與設(shè)計(jì)模式概述_第1頁
軟件體系結(jié)構(gòu)與設(shè)計(jì)模式概述_第2頁
軟件體系結(jié)構(gòu)與設(shè)計(jì)模式概述_第3頁
軟件體系結(jié)構(gòu)與設(shè)計(jì)模式概述_第4頁
軟件體系結(jié)構(gòu)與設(shè)計(jì)模式概述_第5頁
已閱讀5頁,還剩91頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

本資料來源第9章軟件體系結(jié)構(gòu)與設(shè)計(jì)模式軟件體系結(jié)構(gòu)的基本概念典型的軟件體系結(jié)構(gòu)風(fēng)格特定領(lǐng)域的軟件體系結(jié)構(gòu)分布式系統(tǒng)結(jié)構(gòu)體系結(jié)構(gòu)框架設(shè)計(jì)模式9.1軟件體系結(jié)構(gòu)的基本概念什么是體系結(jié)構(gòu)目前還沒有一個(gè)公認(rèn)的關(guān)于軟件體系結(jié)構(gòu)的定義,許多專家學(xué)者從不同角度對(duì)軟件體系結(jié)構(gòu)進(jìn)行了描述。Bass、Clements和Kazman給出了如下定義:“一個(gè)程序或計(jì)算機(jī)系統(tǒng)的軟件體系結(jié)構(gòu)是指系統(tǒng)的一個(gè)或者多個(gè)結(jié)構(gòu)。結(jié)構(gòu)中包括軟件的構(gòu)件、構(gòu)件的外部可見屬性以及它們之間的相互關(guān)系。外部可見屬性則是指軟件構(gòu)件提供的服務(wù)、性能、使用特性、錯(cuò)誤處理、共享資源使用等。”這一定義強(qiáng)調(diào)在任一體系結(jié)構(gòu)表述中“軟件構(gòu)件”的角色。DewaynePerry和A1exanderWo1f曾這樣定義:“軟件體系結(jié)構(gòu)是具有一定形式的結(jié)構(gòu)化元素,即構(gòu)件的集合,包括處理構(gòu)件、數(shù)據(jù)構(gòu)件和連接構(gòu)件。處理構(gòu)件負(fù)責(zé)對(duì)數(shù)據(jù)進(jìn)行加工,數(shù)據(jù)構(gòu)件是被加工的信息,連接構(gòu)件把體系結(jié)構(gòu)的不同部分組合連接起來。”這一定義注重區(qū)分處理構(gòu)件、數(shù)據(jù)構(gòu)件和連接構(gòu)件。雖然軟件體系結(jié)構(gòu)的定義在變化,但其意圖是清晰的。體系結(jié)構(gòu)設(shè)計(jì)是一系列決策和基本原理的集合,這些決策的目標(biāo)在于開發(fā)高效的軟件體系結(jié)構(gòu)。在體系結(jié)構(gòu)設(shè)計(jì)中所強(qiáng)調(diào)的基本原理是系統(tǒng)的可理解性、可維護(hù)性和可擴(kuò)展性。9.1軟件體系結(jié)構(gòu)的基本概念1.模式軟件設(shè)計(jì)模式是從軟件設(shè)計(jì)過程中總結(jié)出來的,是針對(duì)特定問題的解決方案。建筑師C.Alexander對(duì)模式給出的經(jīng)典定義是:每個(gè)模式都描述了一個(gè)在我們的環(huán)境中不斷出現(xiàn)的問題及該問題解決方案的核心。在軟件系統(tǒng)中,可以將模式劃分為以下3類。(1)體系結(jié)構(gòu)模式(architecturalpattern):表達(dá)了軟件系統(tǒng)的基本結(jié)構(gòu)組織形式或者結(jié)構(gòu)方案,包含了一組預(yù)定義的子系統(tǒng),規(guī)定了這些子系統(tǒng)的責(zé)任,同時(shí)還提供了用于組織和管理這些子系統(tǒng)的規(guī)則和向?qū)?。典型的體系結(jié)構(gòu)模式如OSI參考模型。9.1軟件體系結(jié)構(gòu)的基本概念體系結(jié)構(gòu)模式、風(fēng)格和框架的概念

(2)設(shè)計(jì)模式(designpattern):為軟件系統(tǒng)的子系統(tǒng)、構(gòu)件或者構(gòu)件之間的關(guān)系提供一個(gè)精煉之后的解決方案,描述了在特定環(huán)境下,用于解決通用軟件設(shè)計(jì)問題的構(gòu)件以及這些構(gòu)件相互通信時(shí)的各種結(jié)構(gòu)。有代表性的設(shè)計(jì)模式是ErichGamma及其同事提出的23種設(shè)計(jì)模式。(3)慣用法(idiom):是與編程語言相關(guān)的低級(jí)模式,描述如何實(shí)現(xiàn)構(gòu)件的某些功能,或者利用編程語言的特性來實(shí)現(xiàn)構(gòu)件內(nèi)部要素之間的通信功能。9.1軟件體系結(jié)構(gòu)的基本概念2.風(fēng)格風(fēng)格是帶有一種傾向性的模式。同一個(gè)問題可以有不同的解決問題的方案或模式,但我們根據(jù)經(jīng)驗(yàn),通常會(huì)強(qiáng)烈傾向于采用特定的模式,這就是風(fēng)格。每種風(fēng)格描述一種系統(tǒng)范疇,該范疇包括:(1)一組構(gòu)件(如數(shù)據(jù)庫、計(jì)算模塊)完成系統(tǒng)需要的某種功能;(2)一組連接件,它們能使構(gòu)件間實(shí)現(xiàn)“通信”、“合作”和“協(xié)調(diào)”;(3)約束,定義構(gòu)件如何集成為一個(gè)系統(tǒng);(4)語義模型,它能使設(shè)計(jì)者通過分析系統(tǒng)的構(gòu)成成分的性質(zhì)來理解系統(tǒng)的整體性質(zhì)。9.1軟件體系結(jié)構(gòu)的基本概念

體系結(jié)構(gòu)風(fēng)格定義了一個(gè)系統(tǒng)家族,即一個(gè)體系結(jié)構(gòu)定義一個(gè)詞匯表和一組約束。詞匯表中包含一些構(gòu)件和連接件類型,而這組約束指出系統(tǒng)是如何將這些構(gòu)件和連接件組合起來的。體系結(jié)構(gòu)風(fēng)格反映了領(lǐng)域中眾多系統(tǒng)所共有的結(jié)構(gòu)和語義特性,并指導(dǎo)如何將各個(gè)模塊和子系統(tǒng)有效地組織成一個(gè)完整的系統(tǒng)。對(duì)體系結(jié)構(gòu)風(fēng)格的研究和實(shí)踐為大粒度的軟件復(fù)用提供了可能。9.1軟件體系結(jié)構(gòu)的基本概念9.1軟件體系結(jié)構(gòu)的基本概念3.框架隨著應(yīng)用的發(fā)展和完善,某些帶有整體性的應(yīng)用模式被逐漸固定下來,形成特定的框架,包括基本構(gòu)成元素和關(guān)系??蚣苁翘囟☉?yīng)用領(lǐng)域問題的體系結(jié)構(gòu)模式,框架定義了基本構(gòu)成單元和關(guān)系后,開發(fā)者就可以集中精力解決業(yè)務(wù)邏輯問題。在組織形式上,框架是一個(gè)待實(shí)例化的完整系統(tǒng),定義了軟件系統(tǒng)的元素和關(guān)系,創(chuàng)建了基本的模塊,定義了涉及功能更改和擴(kuò)充的插件位置。典型的框架例子有MFC框架和Struts框架。

體系結(jié)構(gòu)的重要作用體現(xiàn)在以下三個(gè)方面:(1)體系結(jié)構(gòu)的表示有助于風(fēng)險(xiǎn)承擔(dān)者(項(xiàng)目干系人)進(jìn)行交流。(2)體系結(jié)構(gòu)突出了早期設(shè)計(jì)決策。(3)軟件體系結(jié)構(gòu)是可傳遞和可復(fù)用的模型。

9.1軟件體系結(jié)構(gòu)的基本概念體系結(jié)構(gòu)的重要作用當(dāng)輸入數(shù)數(shù)據(jù)經(jīng)過過一系列列的計(jì)算算和操作作構(gòu)件的的變換形形成輸出出數(shù)據(jù)時(shí),,可以應(yīng)應(yīng)用這種種體系結(jié)結(jié)構(gòu)。管道/過濾器、批處理序序列都屬于數(shù)數(shù)據(jù)流風(fēng)風(fēng)格。管管道/過濾器結(jié)結(jié)構(gòu)如下下圖所示示。9.2典型的體體系結(jié)構(gòu)構(gòu)風(fēng)格數(shù)據(jù)流風(fēng)風(fēng)格管道/過濾器結(jié)結(jié)構(gòu)從上圖可可看出,,管道/過濾器結(jié)結(jié)構(gòu)擁有有一組被被稱為過濾器(filter)的構(gòu)件件,這些些構(gòu)件通通過管道(pipe)連接,,管道將將數(shù)據(jù)從從一個(gè)構(gòu)構(gòu)件傳送送到下一一個(gè)構(gòu)件件。每個(gè)個(gè)過濾器器獨(dú)立于于其上游游和下游游的構(gòu)件件而工作作,過濾濾器的設(shè)設(shè)計(jì)要針針對(duì)某種種形式的的數(shù)據(jù)輸輸入,并并且產(chǎn)生生某種特特定形式式的數(shù)據(jù)據(jù)輸出。。如果數(shù)據(jù)據(jù)流退化化成為單單線的變變換,則則稱為批處理序列(batchsequential)。這種結(jié)構(gòu)構(gòu)接收一批數(shù)數(shù)據(jù),然后應(yīng)應(yīng)用一系列連連續(xù)的構(gòu)件((過濾器)變變換它。9.2典型的體系結(jié)結(jié)構(gòu)風(fēng)格管道/過濾器風(fēng)格具具有以下優(yōu)點(diǎn):(1)使得軟構(gòu)件件具有良好的的隱蔽性和高高內(nèi)聚、低耦耦合的特點(diǎn)。(2)允許設(shè)計(jì)者者將整個(gè)系統(tǒng)統(tǒng)的輸入/輸出行為看成成是多個(gè)過濾器的行為的的簡單合成。。(3)支持軟件復(fù)復(fù)用。只要提提供適合在兩兩個(gè)過濾器之之間傳送的數(shù)據(jù),任何何兩個(gè)過濾器器都可被連接接起來。(4)系統(tǒng)維護(hù)和和增強(qiáng)系統(tǒng)性性能簡單。新新的過濾器可可以添加到現(xiàn)有系統(tǒng)中中來;舊的可可以被改進(jìn)的的過濾器替換換掉。(5)允許對(duì)一些些如吞吐量、、死鎖等屬性性的分析。(6)支持并行執(zhí)執(zhí)行。每個(gè)過過濾器是作為為一個(gè)單獨(dú)的的任務(wù)完成,因此可與與其他任務(wù)并并行執(zhí)行。9.2典型的體系結(jié)結(jié)構(gòu)風(fēng)格管道/過濾器風(fēng)格主要缺點(diǎn)如下:(1)通常導(dǎo)致進(jìn)進(jìn)程成為批處處理的結(jié)構(gòu)。。這是因?yàn)殡m雖然過濾器可增量式地地處理數(shù)據(jù),,但它們是獨(dú)獨(dú)立的,所以以設(shè)計(jì)者必須須將每個(gè)過濾器器看成一個(gè)完完整的從輸入入到輸出的轉(zhuǎn)轉(zhuǎn)換。(2)不適合處理理交互的應(yīng)用用。當(dāng)需要增增量地顯示改改變時(shí),這個(gè)問題尤為為嚴(yán)重。(3)因?yàn)樵跀?shù)據(jù)據(jù)傳輸上沒有有通用的標(biāo)準(zhǔn)準(zhǔn),每個(gè)過濾濾器都增加了解析和合合成數(shù)據(jù)的工工作,這樣就就導(dǎo)致了系統(tǒng)統(tǒng)性能下降,,并增加了編寫寫過濾器的復(fù)復(fù)雜性。9.2典型的體系結(jié)結(jié)構(gòu)風(fēng)格在此類體系結(jié)結(jié)構(gòu)中,存在在以下3種子風(fēng)格。1.主程序/子程序體系結(jié)結(jié)構(gòu)這種傳統(tǒng)的程程序結(jié)構(gòu)將功功能分解為一一個(gè)控制層次次,其中“主”程序序調(diào)用一組程程序構(gòu)件,這這些程序構(gòu)件件又去調(diào)用別別的程序構(gòu)件,,如下圖所示示。這種結(jié)構(gòu)構(gòu)總體上為樹樹狀結(jié)構(gòu),可以在底底層存在公共共模塊。9.2典型的體系結(jié)結(jié)構(gòu)風(fēng)格調(diào)用—返回風(fēng)格主程序/子程序體系結(jié)結(jié)構(gòu)的優(yōu)點(diǎn)如下:(1)可以使用自自頂向下,逐逐步分解的方方法得到體系系結(jié)構(gòu)圖,典型的拓拓?fù)浣Y(jié)構(gòu)為樹樹狀結(jié)構(gòu)。基基于定義—使用關(guān)系對(duì)子子程序進(jìn)行分解解,使用過程程調(diào)用作為程程序之間的交交互機(jī)制。(2)采用程序設(shè)設(shè)計(jì)語言支持持的單線程控控制。其主要缺點(diǎn)如下:(1)子程序的正正確性難于判判斷。需要運(yùn)運(yùn)用層次推理理來判斷子程序的正確確性,因?yàn)樽幼映绦虻恼_確性取決于它它調(diào)用的子程程序的正確性。。(2)子系統(tǒng)的結(jié)結(jié)構(gòu)不清晰。。通??梢詫⒍鄠€(gè)子程序序合成為模塊。9.2典型的體系結(jié)結(jié)構(gòu)風(fēng)格2.面向?qū)ο箫L(fēng)格格系統(tǒng)的構(gòu)件封封裝了數(shù)據(jù)和和必須應(yīng)用到到該數(shù)據(jù)上的的操作,構(gòu)件間通通過消息傳遞遞進(jìn)行通信與與合作。與主主程序/子程序的體系結(jié)構(gòu)構(gòu)相比,面向向?qū)ο箫L(fēng)格中中的對(duì)象交互互會(huì)復(fù)雜一些。面向?qū)ο笙箫L(fēng)格與網(wǎng)絡(luò)絡(luò)應(yīng)用的需求求在分布性、、自治性、協(xié)作性、演化化性等方面具具有內(nèi)在的一一致性。面向?qū)ο箫L(fēng)格格具有以下優(yōu)點(diǎn):(1)因?yàn)閷?duì)象對(duì)對(duì)其他對(duì)象隱隱藏它的表示示,所以可以以改變一個(gè)對(duì)象的表示示,而不影響響其他對(duì)象。。(2)設(shè)計(jì)者可將將一些數(shù)據(jù)存存取操作的問問題分解成一一些交互的代理程序的的集合。9.2典型的體系結(jié)結(jié)構(gòu)風(fēng)格其缺點(diǎn)如下:(1)為了使一個(gè)個(gè)對(duì)象和另一一個(gè)對(duì)象通過過過程調(diào)用等等進(jìn)行交互,必須知知道對(duì)象的標(biāo)標(biāo)識(shí)。只要一一個(gè)對(duì)象的標(biāo)標(biāo)識(shí)改變了,就必必須修改所有有其他明確調(diào)調(diào)用它的對(duì)象象。(2)必須修改所所有顯式調(diào)用用它的其他對(duì)對(duì)象,并消除除由此帶來的一些副副作用。例如如,如果A使用了對(duì)象B,C也使用了對(duì)象象B,那么,C對(duì)B的使用所造成成的對(duì)A的影響可能是是料想不到的的。9.2典型的體系結(jié)結(jié)構(gòu)風(fēng)格3.層次結(jié)構(gòu)層次結(jié)構(gòu)的基基本結(jié)構(gòu)如下下圖所示。在在這種體系結(jié)結(jié)構(gòu)中,整個(gè)系統(tǒng)被組織織成一個(gè)分層層結(jié)構(gòu),每一一層為上層提提供服務(wù),并并作為下一層的的客戶。9.2典型的體系結(jié)結(jié)構(gòu)風(fēng)格這種風(fēng)格支持持基于可增加加抽象層的設(shè)設(shè)計(jì)。允許將將復(fù)雜問題分解成一個(gè)個(gè)增量步驟序序列的實(shí)現(xiàn)。。由于每一層層最多只影響響兩層,同時(shí)只只要給相鄰層層提供相同的的接口,允許許每層用不同同的方法實(shí)現(xiàn),,同樣為軟件件復(fù)用提供了了強(qiáng)大的支持持。層次結(jié)構(gòu)具有有以下優(yōu)點(diǎn):(1)支持基于抽抽象程度遞增增的系統(tǒng)設(shè)計(jì)計(jì),使設(shè)計(jì)者者可以把一個(gè)復(fù)雜系統(tǒng)統(tǒng)按遞增的步步驟進(jìn)行分解解。(2)支持功能增增強(qiáng),因?yàn)槊棵恳粚又炼嗪秃拖噜彽纳舷孪聦咏换?,因此,功功能的改變最最多影響相鄰鄰的?nèi)外層。。9.2典型的體系結(jié)結(jié)構(gòu)風(fēng)格(3)支持復(fù)用。。只要提供的的服務(wù)接口定定義不變,同同一層的不同實(shí)現(xiàn)可以以交換使用。。這樣,就可可以定義一組組標(biāo)準(zhǔn)的接口口,從從而允允許各各種不不同的的實(shí)現(xiàn)現(xiàn)方法法。其缺點(diǎn)如下:(1)并不不是每每個(gè)系系統(tǒng)都都可以以很容容易地地劃分分為分分層的的模式式,甚至即即使一一個(gè)系系統(tǒng)的的邏輯輯結(jié)構(gòu)構(gòu)是層層次化化的,,出于于對(duì)系系統(tǒng)性能能的考考慮,,系統(tǒng)統(tǒng)設(shè)計(jì)計(jì)師不不得不不把一一些低低級(jí)或或高級(jí)級(jí)的功能能綜合合起來來。(2)很難難找到到一個(gè)個(gè)合適適的、、正確確的層層次抽抽象方方法。。9.2典型的的體系系結(jié)構(gòu)構(gòu)風(fēng)格格數(shù)據(jù)庫庫系統(tǒng)統(tǒng)、超文本本系統(tǒng)統(tǒng)和黑板系系統(tǒng)都屬于于倉庫庫風(fēng)格。在在這種種風(fēng)格格中,,數(shù)據(jù)據(jù)倉庫((如文文件或或數(shù)據(jù)據(jù)庫))位于這這種體體系結(jié)結(jié)構(gòu)的的中心心,其他構(gòu)構(gòu)件會(huì)會(huì)經(jīng)常常訪問問該數(shù)數(shù)據(jù)倉庫庫,并并對(duì)倉倉庫中中的數(shù)數(shù)據(jù)進(jìn)行行增加加、修修改或或刪除除操作。。右圖圖為一一個(gè)典典型的的倉庫風(fēng)風(fēng)格的的體系系結(jié)構(gòu)構(gòu)。9.2典型的的體系系結(jié)構(gòu)構(gòu)風(fēng)格格倉庫風(fēng)風(fēng)格上圖中中,可把中中心存存儲(chǔ)庫庫變換換成““黑板板”,,黑板板構(gòu)件件負(fù)責(zé)責(zé)協(xié)調(diào)信息息在客客戶間間的傳傳遞,,當(dāng)用用戶感感興趣趣的數(shù)數(shù)據(jù)發(fā)發(fā)生變變化時(shí)時(shí),它將通通知客客戶軟軟件。。黑板板系統(tǒng)統(tǒng)的組組成如如下圖圖所示示。黑黑板系系統(tǒng)的傳統(tǒng)統(tǒng)應(yīng)用用是信信號(hào)處處理領(lǐng)領(lǐng)域,,如語語音和和模式式識(shí)別別。另另一應(yīng)應(yīng)用是松耦耦合代代理數(shù)數(shù)據(jù)共共享存存取。。9.2典型的的體系系結(jié)構(gòu)構(gòu)風(fēng)格格特定的的應(yīng)用用還需需要特特定的的體系系結(jié)構(gòu)構(gòu)模型型。這這些體體系結(jié)結(jié)構(gòu)模模型稱稱為領(lǐng)域相相關(guān)的的體系系結(jié)構(gòu)構(gòu)。有兩種種領(lǐng)域域相關(guān)關(guān)的體體系結(jié)結(jié)構(gòu)模模型::類屬模模型(genericmodel)和參考模模型(referencemodel)。9.3特定領(lǐng)領(lǐng)域的的軟件件體系系結(jié)構(gòu)構(gòu)9.3特定領(lǐng)領(lǐng)域的的軟件件體系系結(jié)構(gòu)構(gòu)類屬模模型類屬模模型是是從許許多實(shí)實(shí)際系系統(tǒng)中中抽象象出來來的一一般模模型,,它封封裝了了這些些系統(tǒng)統(tǒng)的主主要特特征。。例如,,許多多圖書書館開開發(fā)了了自己己的圖圖書館館館藏藏/流通系系統(tǒng),,若把把它們們的共共同功功能抽抽取出出來并并創(chuàng)建建一個(gè)個(gè)讓所所有圖圖書館館都認(rèn)認(rèn)可的的系統(tǒng)統(tǒng)體系系結(jié)構(gòu)構(gòu)模型型,這這就是是類屬屬模型型。9.3特定領(lǐng)領(lǐng)域的的軟件件體系系結(jié)構(gòu)構(gòu)類屬模模型的的一個(gè)個(gè)最著著名的的例子子是編譯器器模型型,由這這個(gè)模模型已已開發(fā)發(fā)出了了數(shù)以以千計(jì)計(jì)的編編譯器器。參考模模型源源于對(duì)對(duì)應(yīng)用用領(lǐng)域域的研研究,,它描述了了一個(gè)個(gè)理想想化的的包含含了系系統(tǒng)應(yīng)應(yīng)具有有的所所有特特征的的軟件件體系系結(jié)構(gòu)構(gòu)。它是更更抽象象且是是描述述一大大類系系統(tǒng)的的模型型,并并且也也是對(duì)對(duì)設(shè)計(jì)計(jì)者有有關(guān)某某類系系統(tǒng)的的一般般結(jié)構(gòu)構(gòu)的指指導(dǎo)。。9.3特定領(lǐng)領(lǐng)域的的軟件件體系系結(jié)構(gòu)構(gòu)參考模模型9.3特定領(lǐng)領(lǐng)域的的軟件件體系系結(jié)構(gòu)構(gòu)參考模模型的的典型型例子子是開放式式系統(tǒng)統(tǒng)互聯(lián)聯(lián)(OSI)參考考模型型。9.3特定領(lǐng)領(lǐng)域的的軟件件體系系結(jié)構(gòu)構(gòu)以上兩兩種不不同類類型的的模型型之間間并不不存在在嚴(yán)格格的區(qū)區(qū)別,,也可可以將將類屬屬模型型視為為參考考模型型。區(qū)別之之一是是類屬屬模型型可以以直接接在設(shè)設(shè)計(jì)中中復(fù)用用,而而參考考模型型一般般是用用于領(lǐng)領(lǐng)域概概念間間的交交流和和對(duì)可可能的的體系系結(jié)構(gòu)構(gòu)做出出比較較。另外,,類屬屬模型型通常常是經(jīng)經(jīng)過““自下下而上上”地地對(duì)已已有系系統(tǒng)的的抽象象,而而參考考模型型是““由上上到下下”地地產(chǎn)生生的。。9.4分布式式系統(tǒng)統(tǒng)結(jié)構(gòu)構(gòu)在集中中式計(jì)計(jì)算技技術(shù)時(shí)時(shí)代廣廣泛使使用的的是大大型機(jī)機(jī)/小型機(jī)機(jī)計(jì)算算模型型。20世紀(jì)80年代以以后,,集中中式結(jié)結(jié)構(gòu)逐逐漸被被以PC為主的的微機(jī)機(jī)網(wǎng)絡(luò)絡(luò)所取取代。。個(gè)人人計(jì)算算機(jī)和和工作作站的的采用用,永永遠(yuǎn)改改變了了大型型機(jī)/小型機(jī)機(jī)計(jì)算算模型型,從從而產(chǎn)產(chǎn)生了了分布布式計(jì)計(jì)算模模型。。9.4分布布式式系系統(tǒng)統(tǒng)結(jié)結(jié)構(gòu)構(gòu)分布布式式計(jì)計(jì)算算模模型型主主要要具具有有以以下下優(yōu)優(yōu)點(diǎn)點(diǎn)::(1)資源源共共享享。。分分布布式式系系統(tǒng)統(tǒng)允允許許硬硬件件、、軟軟件件等等資資源源共共享享使使用用。。(2)經(jīng)濟(jì)濟(jì)性性。。(3)性能能與與可可擴(kuò)擴(kuò)展展性性。。(4)固有有分分布布性性。。(5)健壯壯性性。。分布布式式系系統(tǒng)統(tǒng)的的一一個(gè)個(gè)最最簡簡單單的的模模型型是是多多處處理理器器系系統(tǒng)統(tǒng),,系系統(tǒng)統(tǒng)由由許多多進(jìn)進(jìn)程程組組成成,,這這些些進(jìn)進(jìn)程程可可以以在在不不同同的的處處理理器器上上并并行行運(yùn)運(yùn)行行,,可以以極極大大地地提提高高系系統(tǒng)統(tǒng)的的性性能能。。由于于大大型型實(shí)實(shí)時(shí)時(shí)系系統(tǒng)統(tǒng)對(duì)對(duì)響響應(yīng)應(yīng)時(shí)時(shí)間間要要求求較較高高,,這這種種模模型型在在大大型型實(shí)時(shí)時(shí)系系統(tǒng)統(tǒng)中中比比較較常常見見。。大大型型實(shí)實(shí)時(shí)時(shí)系系統(tǒng)統(tǒng)需需要要實(shí)實(shí)時(shí)時(shí)采采集集信信息息,,并并利用用采采集集到到的的信信息息進(jìn)進(jìn)行行決決策策,,然然后后發(fā)發(fā)送送信信號(hào)號(hào)給給執(zhí)執(zhí)行行機(jī)機(jī)構(gòu)構(gòu)。。雖雖然,,信信息息采采集集、、決決策策制制定定和和執(zhí)執(zhí)行行控控制制這這些些進(jìn)進(jìn)程程可可以以在在同同一一臺(tái)臺(tái)處理理器器上上統(tǒng)統(tǒng)一一調(diào)調(diào)度度執(zhí)執(zhí)行行,,但但使使用用多多處處理理器器能能夠夠提提高高系系統(tǒng)統(tǒng)性性能。。9.4分布布式式系系統(tǒng)統(tǒng)結(jié)結(jié)構(gòu)構(gòu)多處處理理器器體體系系結(jié)結(jié)構(gòu)構(gòu)客戶戶機(jī)機(jī)/服務(wù)務(wù)器器((client/server,C/S)體體系系結(jié)結(jié)構(gòu)構(gòu)是是基基于于資源不對(duì)對(duì)等,且且為實(shí)現(xiàn)現(xiàn)共享而而提出來來的,由由服務(wù)器、客戶機(jī)和網(wǎng)絡(luò)三部分組組成。在C/S體系結(jié)構(gòu)構(gòu)中,客客戶機(jī)可可以通過過遠(yuǎn)程調(diào)調(diào)用來獲獲取服務(wù)器提供供的服務(wù)務(wù),因此此,客戶戶機(jī)必須須知道可可用的服服務(wù)器的的名字及它它們所提提供的服服務(wù),而而服務(wù)器器不需要要知道客客戶機(jī)的的身份,也也不需要要知道有有多少臺(tái)臺(tái)服務(wù)器器在運(yùn)行行。9.4分布式系系統(tǒng)結(jié)構(gòu)構(gòu)客戶/服務(wù)器體體系結(jié)構(gòu)構(gòu)9.4分布式系系統(tǒng)結(jié)構(gòu)構(gòu)傳統(tǒng)的C/S體系結(jié)構(gòu)構(gòu)分為兩兩層。在在這種體體系結(jié)構(gòu)構(gòu)中,一一個(gè)應(yīng)用系系統(tǒng)被劃劃分為客客戶機(jī)和和服務(wù)器器兩部分分。典型型的兩層層C/S體系結(jié)構(gòu)構(gòu)如下圖圖所示。。兩層C/S體系結(jié)構(gòu)構(gòu)可以有有兩種形形態(tài):(1)瘦客戶機(jī)機(jī)模型。在瘦客客戶機(jī)模模型中,,數(shù)據(jù)管管理部分分和應(yīng)用邏邏輯都在在服務(wù)器器上執(zhí)行行,客戶戶機(jī)只負(fù)負(fù)責(zé)表示示部分。。瘦客戶機(jī)機(jī)模型的的主要缺缺點(diǎn):它將繁重重的處理理負(fù)荷都都放在了了服務(wù)器器和網(wǎng)絡(luò)絡(luò)上,服服務(wù)器負(fù)負(fù)責(zé)所有有的計(jì)算算,這將將增加客客戶機(jī)和和服務(wù)器器之間的的網(wǎng)絡(luò)流流量。目前個(gè)人人計(jì)算機(jī)機(jī)所具有有的處理理能力在在瘦客戶戶機(jī)模型型中用不不上。9.4分布式系系統(tǒng)結(jié)構(gòu)構(gòu)(2)胖客戶機(jī)機(jī)模型。在這種種模型中中,服務(wù)務(wù)器只負(fù)負(fù)責(zé)對(duì)數(shù)數(shù)據(jù)的管理。??蛻魴C(jī)機(jī)上的軟軟件實(shí)現(xiàn)現(xiàn)應(yīng)用邏邏輯和與與系統(tǒng)用用戶的交交互。胖客戶機(jī)機(jī)模型能能夠利用用客戶機(jī)機(jī)的處理理能力,,比瘦客客戶機(jī)模型在分分布處理理上更有有效。但但另一方方面,隨隨著企業(yè)業(yè)規(guī)模的的日益擴(kuò)大大,軟件件的復(fù)雜雜程度不不斷提高高,胖客客戶機(jī)模模型逐漸漸暴露出了了以下缺缺點(diǎn):開發(fā)成本本較高。。用戶界面面風(fēng)格不不一,使使用繁雜雜,不利利于推廣廣使用。。軟件移植植困難。。軟件維護(hù)護(hù)和升級(jí)級(jí)困難。。9.4分布式系系統(tǒng)結(jié)構(gòu)構(gòu)為了解決決以上問問題,三層C/S體系結(jié)構(gòu)構(gòu)應(yīng)運(yùn)而生生。三層層C/S體系結(jié)構(gòu)構(gòu)中增加加了應(yīng)用用服務(wù)器器。可以以將整個(gè)個(gè)應(yīng)用邏邏輯駐留留在應(yīng)用用服務(wù)器器上,而而只有表表示層存存在于客客戶機(jī)上上。9.4分布式系系統(tǒng)結(jié)構(gòu)構(gòu)三層C/S體系結(jié)構(gòu)構(gòu)將整個(gè)個(gè)系統(tǒng)分分成表示層、應(yīng)用邏輯輯層和數(shù)據(jù)層三個(gè)部分分,其數(shù)數(shù)據(jù)處理理流程如如下圖所所示。9.4分布式系系統(tǒng)結(jié)構(gòu)構(gòu)9.4分布式系系統(tǒng)結(jié)構(gòu)構(gòu)(1)表示層:表示層層是應(yīng)用用系統(tǒng)的的用戶界界面部分分,擔(dān)負(fù)負(fù)著用戶與應(yīng)應(yīng)用程序序之間的的對(duì)話功功能。它它用于檢檢查用戶戶從鍵盤盤等輸入的數(shù)數(shù)據(jù),顯顯示應(yīng)用用程序輸輸出的數(shù)數(shù)據(jù),一一般采用用圖形用用戶界面(graphicuserinterface,GUI)。(2)應(yīng)用邏輯輯層:應(yīng)用邏邏輯層為為應(yīng)用系系統(tǒng)的主主體部分分,包含具體的業(yè)業(yè)務(wù)處理邏邏輯。通常常在功能層層中包含有有確認(rèn)用戶戶對(duì)應(yīng)用和數(shù)據(jù)據(jù)庫存取權(quán)權(quán)限的功能能以及記錄錄系統(tǒng)處理理日志的功功能。(3)數(shù)據(jù)層:數(shù)據(jù)層主主要包括數(shù)數(shù)據(jù)的存儲(chǔ)儲(chǔ)及對(duì)數(shù)據(jù)據(jù)的存取操作,一般般選擇關(guān)系系型數(shù)據(jù)庫庫管理系統(tǒng)統(tǒng)(RDBMS)。瀏覽器/服務(wù)器(browser/server,B/S)風(fēng)格是三三層體系結(jié)構(gòu)的一一種實(shí)現(xiàn)方方式,其具具體結(jié)構(gòu)為為瀏覽器/Web服務(wù)器/數(shù)據(jù)庫服務(wù)務(wù)器。B/S體系結(jié)構(gòu)如如下圖所示示。9.4分布式系統(tǒng)統(tǒng)結(jié)構(gòu)B/S體系結(jié)構(gòu)主主要是利用用不斷成熟熟的.瀏覽器技術(shù)術(shù),結(jié)合瀏瀏覽器的多多種腳本語語言,用通通用瀏覽器器就實(shí)現(xiàn)了了原來需要要復(fù)雜的專專用軟件才才能實(shí)現(xiàn)的的強(qiáng)大功能能,并節(jié)約約了開發(fā)成成本。從某某種程度上上來說,B/S結(jié)構(gòu)是一種種全新的軟軟件體系結(jié)結(jié)構(gòu)。B/S體系結(jié)構(gòu)具具有以下優(yōu)優(yōu)點(diǎn):(1)基于B/S體系結(jié)構(gòu)的的軟件,系系統(tǒng)安裝、、修改和維維護(hù)全在服務(wù)器端端解決。(2)B/S體系結(jié)構(gòu)還還提供了異異種機(jī)、異異種網(wǎng)、異異種應(yīng)用服服務(wù)的聯(lián)機(jī)、、聯(lián)網(wǎng)和統(tǒng)統(tǒng)一服務(wù)的的最現(xiàn)實(shí)的的開放性基基礎(chǔ)。9.4分布式系統(tǒng)統(tǒng)結(jié)構(gòu)與C/S體系結(jié)構(gòu)相相比,B/S體系結(jié)構(gòu)也也有許多不不足之處。。(1)B/S體系結(jié)構(gòu)缺缺乏對(duì)動(dòng)態(tài)態(tài)頁面的支支持能力,,沒有集成成有效的數(shù)據(jù)據(jù)庫處理功功能。(2)采用B/S體系結(jié)構(gòu)的的應(yīng)用系統(tǒng)統(tǒng),在數(shù)據(jù)據(jù)查詢等響響應(yīng)速度上,要遠(yuǎn)遠(yuǎn)遠(yuǎn)地低于于C/S體系結(jié)構(gòu)。。(3)B/S體系結(jié)構(gòu)的的數(shù)據(jù)提交交一般以頁頁面為單位位,數(shù)據(jù)的的動(dòng)態(tài)交互性性不強(qiáng),不不利于在線線事務(wù)處理理(OLTP)應(yīng)用。9.4分布式系統(tǒng)統(tǒng)結(jié)構(gòu)在客戶機(jī)/服務(wù)器模型型中,客戶戶機(jī)和服務(wù)務(wù)器的地位位是不同的。為了消消除客戶機(jī)機(jī)與服務(wù)器器之間的差差別,提高高系統(tǒng)的伸伸縮性以及有有效地均衡衡負(fù)載,可可采用分布布式對(duì)象體體系結(jié)構(gòu)來來設(shè)計(jì)系統(tǒng)。。分布式對(duì)象象的實(shí)質(zhì)是在在分布式異異構(gòu)環(huán)境下下建立應(yīng)用用系統(tǒng)框架和對(duì)象象構(gòu)件,它它將應(yīng)用服服務(wù)分割成成具有完整整邏輯含義義的獨(dú)立子模模塊(稱為為構(gòu)件),各個(gè)子子模塊可放放在同一臺(tái)服務(wù)器器或分布在在多臺(tái)服務(wù)務(wù)器上運(yùn)行行,模塊之之間通過中中間件互相通通信。9.4分布式系統(tǒng)統(tǒng)結(jié)構(gòu)分布式對(duì)象象體系結(jié)構(gòu)構(gòu)通常將這個(gè)個(gè)中間件稱稱為軟件總線或?qū)ο笳?qǐng)求代代理,它的作用用是在對(duì)象象之間提供供一個(gè)無縫縫接口。9.4分布式系統(tǒng)統(tǒng)結(jié)構(gòu)分布式對(duì)象象技術(shù)的應(yīng)應(yīng)用目的是為了降低低主服務(wù)器器的負(fù)荷、、共享網(wǎng)絡(luò)資資源、平衡衡網(wǎng)絡(luò)中計(jì)計(jì)算機(jī)業(yè)務(wù)務(wù)處理的分分配,提高高計(jì)算機(jī)系統(tǒng)協(xié)協(xié)同處理的的能力,從從而使應(yīng)用用的實(shí)現(xiàn)更更為靈活。。分布式對(duì)象象技術(shù)的基基礎(chǔ)是構(gòu)件件。構(gòu)件是一些獨(dú)立立的代碼封封裝體,在在分布計(jì)算算的環(huán)境下下可以是一個(gè)簡單的的對(duì)象,但大多數(shù)數(shù)情況下是是一組相關(guān)的的對(duì)象組合合體,提供一定定的服務(wù)。。分布式環(huán)境境下,構(gòu)件件是一些靈靈活的軟件件模塊,它它們可以位位置透明、、語言獨(dú)立立和平臺(tái)獨(dú)獨(dú)立地互相相發(fā)送消息息,實(shí)現(xiàn)請(qǐng)請(qǐng)求服務(wù)。。構(gòu)件之間并并不存在客客戶機(jī)與服服務(wù)器的界界限,接受受服務(wù)者扮扮演客戶機(jī)機(jī)的角色,,提供服務(wù)務(wù)者就是服服務(wù)器。9.4分布式系統(tǒng)統(tǒng)結(jié)構(gòu)9.4分布式系統(tǒng)統(tǒng)結(jié)構(gòu)當(dāng)前主流的的分布式對(duì)對(duì)象技術(shù)規(guī)規(guī)范有OMG的CORBA、Microsoft公司的.NET和Sun公司的J2EE。它們都支持持服務(wù)端構(gòu)構(gòu)件的開發(fā)發(fā),都有其其各自的特特點(diǎn)。代理可以用用于構(gòu)建帶帶有隔離組組件的分布布式軟件系系統(tǒng),該軟件通過遠(yuǎn)遠(yuǎn)程服務(wù)調(diào)調(diào)用進(jìn)行交交互。代理理者負(fù)責(zé)協(xié)協(xié)調(diào)通信,,諸如轉(zhuǎn)發(fā)請(qǐng)請(qǐng)求以及傳傳遞結(jié)果和和異常等。。1991年,OMG基于面向?qū)?duì)象技術(shù),,給出了以以對(duì)象請(qǐng)求求代理(ORB)為中心的的分布式應(yīng)應(yīng)用體系結(jié)結(jié)構(gòu)。9.4分布式系統(tǒng)統(tǒng)結(jié)構(gòu)代理在OMG的對(duì)象管理理結(jié)構(gòu)中,,ORB是一個(gè)關(guān)鍵鍵的通信機(jī)機(jī)制,它以實(shí)實(shí)現(xiàn)互操作作性為主要要目標(biāo),處處理對(duì)象之之間的消息息分布。在ORB之上有4個(gè)對(duì)象接口口:(1)對(duì)象服務(wù):定義加入入ORB的系統(tǒng)級(jí)服服務(wù),如安安全性、命名和和事務(wù)處理理,它們是是與應(yīng)用領(lǐng)領(lǐng)域無關(guān)的的。(2)公共設(shè)施:水平級(jí)的的服務(wù),定定義應(yīng)用程程序級(jí)服務(wù)務(wù)。(3)領(lǐng)域接口:面向特定定的領(lǐng)域。。(4)應(yīng)用接口:面向指定定的現(xiàn)實(shí)世世界應(yīng)用。。是指供應(yīng)應(yīng)商或用戶借助于于ORB、公共對(duì)象象服務(wù)及公公共設(shè)施而而開發(fā)的特定產(chǎn)品。。9.4分布式系統(tǒng)統(tǒng)結(jié)構(gòu)MVC框架即模型型—視圖—控制器(model-view-controller)框架,它它強(qiáng)調(diào)將用用戶輸入、、數(shù)據(jù)模型型和數(shù)據(jù)表表示的方式式分開設(shè)計(jì)計(jì),一個(gè)交交互式應(yīng)用用系統(tǒng)由模型、視圖和控制器3個(gè)部件組成成,分別對(duì)對(duì)應(yīng)于內(nèi)部部數(shù)據(jù)、數(shù)數(shù)據(jù)表示和和輸入/輸出控制部部分。9.5體系結(jié)構(gòu)框框架MVC框架9.5體系結(jié)構(gòu)框框架MVC框架1.模型對(duì)象模型對(duì)象獨(dú)獨(dú)立于外在在顯示內(nèi)容容和形式,,代表應(yīng)用用領(lǐng)域中的的業(yè)務(wù)實(shí)體和和業(yè)務(wù)規(guī)則則,是整個(gè)模型的的核心。模型對(duì)象象的變化通過事件處處理通知視視圖和控制制器對(duì)象。。2.視圖對(duì)象視圖對(duì)象代代表GUI對(duì)象,并且且以用戶需需要的格式式表示模型型狀態(tài),是交交互系統(tǒng)與與外界的接接口。視圖圖對(duì)象可以以包含子視視圖,子視圖圖用于顯示示模型的不不同部分。。通常,每每個(gè)視圖對(duì)對(duì)象對(duì)應(yīng)一個(gè)控控制器對(duì)象象。9.5體系結(jié)構(gòu)框框架3.控制器對(duì)象象控制器對(duì)象象代表鼠標(biāo)標(biāo)和鍵盤事事件。它處處理用戶的的輸入行為為并給模型型發(fā)送業(yè)務(wù)務(wù)事件,再再將業(yè)務(wù)事事件解析為為模型應(yīng)執(zhí)執(zhí)行的動(dòng)作作;同時(shí),,模型的更更新與修改改也將通過過控制器來來通知視圖圖,從而保保持各個(gè)視視圖與模型型的一致性性。9.5體系結(jié)構(gòu)框框架9.5體系結(jié)構(gòu)框框架MVC的處理過程程為:首先控制制器接收用用戶的請(qǐng)求求,并決定定應(yīng)該調(diào)用用哪個(gè)模型型來進(jìn)行處處理;然后后模型用業(yè)業(yè)務(wù)邏輯來來處理用戶戶的請(qǐng)求并并返回?cái)?shù)據(jù)據(jù);最后控控制器用相相應(yīng)的視圖圖格式化模模型返回的的數(shù)據(jù),并并通過表示示層呈現(xiàn)給給用戶。其中,模型型是核心數(shù)數(shù)據(jù)和功能能,視圖只只關(guān)心顯示示數(shù)據(jù),控控制只關(guān)心心用戶輸入入,這種結(jié)結(jié)構(gòu)由于將將數(shù)據(jù)和業(yè)業(yè)務(wù)規(guī)則從從表示層分分開,因此此可以最大大化地重用用代碼。J2EE的核心體系系結(jié)構(gòu)就是是在MVC框架的基礎(chǔ)礎(chǔ)上進(jìn)行擴(kuò)擴(kuò)展得到的,如如下圖所示示。9.5體系結(jié)構(gòu)框框架J2EE體系結(jié)構(gòu)框框架J2EE的核心體系系結(jié)構(gòu)框架架客戶層:用戶通過過客戶層與與系統(tǒng)交互互。該層可可以是各種種類型的客客戶端。例例如,可編編程客戶端端(如基于于JavaSwing的客戶端或或applet),純Web瀏覽器客戶戶端,WML移動(dòng)客戶端端等。資源層:資源層可可以是企業(yè)業(yè)數(shù)據(jù)庫,,電子商務(wù)務(wù)解決方案案中的外部部企業(yè)系統(tǒng)統(tǒng),或者是是外部SOA服務(wù)。數(shù)據(jù)據(jù)可以分布布在多個(gè)服服務(wù)器上。。從上圖可看看出,J2EE模型是分層結(jié)構(gòu),中間的3層(表示層層,業(yè)務(wù)層層,集成層層)包含應(yīng)應(yīng)用程序構(gòu)構(gòu)件,客戶戶層和資源源層處于應(yīng)應(yīng)用程序的的外圍。9.5體系結(jié)構(gòu)框框架表示層:也稱為Web層或服務(wù)器器端表示層層,用戶通通過表示層層來訪問應(yīng)應(yīng)用程序。。在基于Web的應(yīng)用系統(tǒng)統(tǒng)中,表示示層由用戶戶界面代碼碼和運(yùn)行于于Web服務(wù)器或應(yīng)應(yīng)用服務(wù)器器上的過程程組成。參參考MVC框架,表示示層包括視視圖構(gòu)件和和控制器構(gòu)構(gòu)件。業(yè)務(wù)層:業(yè)務(wù)層包含含表示層中中的控制器器構(gòu)件沒有有實(shí)現(xiàn)的一一部分應(yīng)用用邏輯。它它負(fù)責(zé)確認(rèn)認(rèn)和執(zhí)行企企業(yè)范圍內(nèi)內(nèi)的業(yè)務(wù)規(guī)規(guī)則和事務(wù)務(wù),并管理理從資源層層加載到應(yīng)應(yīng)用程序高高速緩存中中的業(yè)務(wù)對(duì)對(duì)象。集成層:集成層負(fù)責(zé)責(zé)建立和維維護(hù)與數(shù)據(jù)據(jù)源的連接接。例如,,通過JDBC與數(shù)據(jù)庫進(jìn)進(jìn)行通信,,利用Java消息服務(wù)((JMS)與外部系系統(tǒng)聯(lián)合。。9.5體系結(jié)構(gòu)框框架1.PCMEF框架表示—控制—中介者—實(shí)體—基礎(chǔ)(presentation-control-mediator-entity-foundation,PCMEF)是一個(gè)垂垂直層次的的分層體系系結(jié)構(gòu)框架架。每一層層是可以包包含其他包包的包。PCMEF框架包含4層:表示層層、控制層層、領(lǐng)域?qū)訉雍突A(chǔ)層層。領(lǐng)域?qū)訉影瑑蓚€(gè)個(gè)預(yù)定義包包:實(shí)體((entity)包和中介介者(mediator)包。PCMEF框架中包的依依賴性主要是是向下依賴性性。表示層依依賴于控制層層,控制層依依賴于領(lǐng)域?qū)訉樱薪檎甙蕾囉趯?shí)體體包和基礎(chǔ)層層,如下圖所示。PCMEF與PCBMER框架9.5體系結(jié)構(gòu)框架架表示層:包含定義GUI對(duì)象的類??刂茖?處理表示層的的請(qǐng)求,負(fù)責(zé)責(zé)大多數(shù)程序序邏輯、算法法、主要計(jì)算算以及為每個(gè)個(gè)用戶維持會(huì)會(huì)話狀態(tài)。領(lǐng)域?qū)?其實(shí)體包處理理控制請(qǐng)求,中介者包用于于創(chuàng)建一個(gè)協(xié)協(xié)調(diào)實(shí)體類和和基礎(chǔ)類的通通信通道?;A(chǔ)層:負(fù)責(zé)與數(shù)據(jù)庫庫和Web服務(wù)的所有通通信。9.5體系結(jié)構(gòu)框架架PCMEF框架2.PCBMER框架PCBMER框架由PCMEF框架擴(kuò)展而成成,代表著表示—控制器—Bean——中介者—實(shí)體—資源(presentation-control-bean-mediator-entity-resource,PCBMER)。其核心體體系結(jié)構(gòu)框架架如右圖所示示。9.5體系結(jié)構(gòu)框架架PCBMER的核心框架在上圖中,把把層表示為UML包(子系統(tǒng),,層),帶箭箭頭的虛線表示依賴賴關(guān)系。例如如,表示層依依賴控制器層層和bean層,控制器層依賴bean層。PCBMER的層次不是嚴(yán)嚴(yán)格線性的,,上層可以依賴多個(gè)相相鄰下層。bean層:表示那些預(yù)預(yù)先確定要呈呈現(xiàn)在用戶界界面上的數(shù)據(jù)據(jù)類和值對(duì)象象。除了用戶戶輸入外,bean數(shù)據(jù)由實(shí)體對(duì)對(duì)象(實(shí)體層層)創(chuàng)建。表示層:表示屏幕以及及呈現(xiàn)bean對(duì)象的UI對(duì)象??刂破鲗樱罕硎緫?yīng)用邏邏輯。實(shí)體層:響應(yīng)控制器和和中介者。中介者層:建立了充當(dāng)實(shí)實(shí)體類和資源源類媒介的通通信管道。資源層:負(fù)責(zé)所有與與外部持久數(shù)數(shù)據(jù)資源(數(shù)數(shù)據(jù)庫、Web服務(wù)等)的通通信。9.5體系結(jié)構(gòu)框架架面向?qū)ο笤O(shè)計(jì)計(jì)模式最初出出現(xiàn)于70年代末80年代初。ErichGamma等4人合著的“DesignPatterns:ElementsofReusableObject-OrientedSoftware”被認(rèn)為是設(shè)計(jì)計(jì)模式方面的的經(jīng)典著作。。目前,設(shè)計(jì)模模式已經(jīng)被廣廣泛應(yīng)用于多多種領(lǐng)域的軟軟件設(shè)計(jì)和構(gòu)構(gòu)造中,許多多當(dāng)代的先進(jìn)進(jìn)軟件中已大大量采用了軟軟件設(shè)計(jì)模式式的概念。9.6設(shè)計(jì)模式9.6設(shè)計(jì)模式一般來說,一一個(gè)模式有4個(gè)基本的要素素:模式名稱:用于描述模模式的名字,,說明模式的的問題、解決決方案和效果果。問題:說明在何種種場合使用模模式。解決方案:描述設(shè)計(jì)的的組成成分、、它們之間的的相互關(guān)系、、各自的職責(zé)責(zé)和合作方式式。效果:描述了模式式使用的效果果及使用模式式應(yīng)當(dāng)權(quán)衡的的問題。抽象工廠(1)目的:提供一一個(gè)接口用以以創(chuàng)建一個(gè)相相聯(lián)系或相依依賴的對(duì)象族族,而無須指指定它們的具具體類。(2)思路:例如,,在創(chuàng)建可支支持多種GUI標(biāo)準(zhǔn)(如Motif和PersentationManager)的繪圖用戶戶界面工具包包時(shí),因?yàn)椴徊煌腉UI標(biāo)準(zhǔn)會(huì)定義出出不同外觀及及行為的“用用戶界面組件件”(widget),如滾動(dòng)條條、按鈕、視視窗等。為了了能夠囊括各各種GUI標(biāo)準(zhǔn),應(yīng)用程程序不能把組組件寫死,不不能限制到特特定GUI風(fēng)格的組件類類,否則日后后很難換成其其他GUI風(fēng)格的組件。。抽象工廠解決方法是::先定義一個(gè)個(gè)抽象類WidgetFactory(用斜體字區(qū)區(qū)分抽象類)),這個(gè)類聲聲明了創(chuàng)建各各種基本組件件的接口,再再逐一替各種種基本組件定定義相對(duì)應(yīng)的的抽象類,如如ScrollBar、Window等,讓它們的的具體子類來來真正實(shí)現(xiàn)特特定的GUI標(biāo)準(zhǔn)。抽象工廠可支持多種GUI標(biāo)準(zhǔn)的繪圖用用戶界面工具具包的結(jié)構(gòu)圖圖抽象工廠(3)結(jié)構(gòu):抽象工工廠模式的結(jié)結(jié)構(gòu)如圖所示示。抽象工廠(4)參與者職責(zé)a)抽象工廠類((AbstractFactory):聲明創(chuàng)建建抽象產(chǎn)品對(duì)對(duì)象的操作的的接口。b)具體工廠類((ConcreteFactory):實(shí)現(xiàn)產(chǎn)生生具體產(chǎn)品對(duì)對(duì)象的操作。。c)抽象產(chǎn)品類((AbstractProduct):聲明一種種產(chǎn)品對(duì)象的的接口。d)具體產(chǎn)品類((ConcreteProduct):定義將被被相應(yīng)的具體體工廠類產(chǎn)生生的產(chǎn)品對(duì)象象,并實(shí)現(xiàn)抽抽象產(chǎn)品類接接口。e)客戶(Client):僅使用由由抽象工廠類類和抽象產(chǎn)品品類聲明的接接口。抽象工廠(5)協(xié)作在執(zhí)行時(shí),AbstractFactory將產(chǎn)品交給ConcreteFactory創(chuàng)建。ConcreteFactory類的實(shí)例只有有一個(gè),專門門針對(duì)某種特特定的實(shí)現(xiàn)標(biāo)標(biāo)準(zhǔn),建立具具體可用的產(chǎn)產(chǎn)品對(duì)象。如果想要建立立其他標(biāo)準(zhǔn)的的產(chǎn)品對(duì)象,,客戶程序就就得改用另一一種ConcreteFactory。單件(1)目的:一個(gè)類類只有一個(gè)實(shí)實(shí)例并提供一一個(gè)訪問它的的全局訪問點(diǎn)點(diǎn)。該實(shí)例應(yīng)應(yīng)在系統(tǒng)生存存期中都存在在。(2)思路:例如,,通常情況下下,用戶可以以對(duì)應(yīng)用系統(tǒng)統(tǒng)進(jìn)行配置,,并將配置信信息保存在配配置文件中,,應(yīng)用系統(tǒng)在在啟動(dòng)時(shí)首先先將配置文件件加載到內(nèi)存存中,這些內(nèi)內(nèi)存配置信息息應(yīng)該有且僅僅有一份。應(yīng)應(yīng)用單件模式式可以保證Configure類只能有一個(gè)個(gè)實(shí)例。單件(3)結(jié)構(gòu):單件模模式的結(jié)構(gòu)如如圖所示。單件(4)參與者職責(zé)a)單件(Singleton):能夠創(chuàng)建建它唯一的實(shí)實(shí)例;同時(shí)定定義了一個(gè)Instance操作,允許外外部存取它唯唯一的實(shí)例。。Instance是一個(gè)靜態(tài)成成員函數(shù)(5)協(xié)作:客戶只只能通過Singleton的Instance()存取這唯一的的實(shí)例。外觀(1)目的:給子系系統(tǒng)中的一組組接口提供一一套統(tǒng)一的高高層界面,使使得子系統(tǒng)更更容易使用。。(2)思路:將系統(tǒng)統(tǒng)劃分為若干干子系統(tǒng),雖雖然可以降低低整體的復(fù)雜雜性,但還需需設(shè)法降低子子系統(tǒng)之間的的通信和相互互的依賴性。。一種方法就就是引進(jìn)一個(gè)個(gè)外觀(facade)對(duì)象,為子子系統(tǒng)內(nèi)各種種設(shè)施提供一一個(gè)簡單的單單一界面。外觀(3)結(jié)構(gòu):外觀模模式的結(jié)構(gòu)如如圖所示。外觀(4)參與者職責(zé)a)外觀(Fa?ade):知道子系系統(tǒng)中哪個(gè)類類負(fù)責(zé)處理哪哪種信息;并并負(fù)責(zé)把外界界輸入的信息息轉(zhuǎn)交給適當(dāng)當(dāng)?shù)淖酉到y(tǒng)對(duì)對(duì)象。b)子系統(tǒng)中的類類(subsystemclasses):實(shí)現(xiàn)子系系統(tǒng)的功能;;處理Facade對(duì)象分派的工工作;如果不不受Facade的控制,則也也不會(huì)有返回回Facade的引用存在。。(5)協(xié)作:使用Facade的客戶不用直直接訪問子系系統(tǒng)對(duì)象。外外界想與子系系統(tǒng)交互時(shí),,把信息傳送送給Facade,F(xiàn)acade再把這些信息息轉(zhuǎn)交給適當(dāng)當(dāng)?shù)淖酉到y(tǒng)對(duì)對(duì)象。雖然實(shí)實(shí)際處理工作作是子系統(tǒng)對(duì)對(duì)象在做,但但Facade會(huì)居中做接口口轉(zhuǎn)換工作。。適配器(1)目的:適配器器模式將一個(gè)個(gè)類的接口轉(zhuǎn)轉(zhuǎn)換為客戶期期望的另一種種接口,使得得原本不匹配配的接口而無無法合作的類類可以一起工工作。(2)思路:有時(shí)要要將兩個(gè)沒有有關(guān)系的類組組合在一起使使用,一種解解決方案是修修改各自類的的接口,另一一種辦法是使使用Adapter模式,在兩種種接口之間創(chuàng)創(chuàng)建一個(gè)混合合接口。例如如,,設(shè)設(shè)有有一一個(gè)個(gè)圖圖形形編編輯輯器器,,可可畫畫直直線線、、多多邊邊形形、、文文本本等等。。它它的的接接口口定定義義成成抽抽象象類類Shape,它它的的子子類類負(fù)負(fù)責(zé)責(zé)畫畫各各種種圖圖形形。。此此外外,,還還有有一一個(gè)個(gè)外外購購的的GUI軟件件包包TextView,用用于于顯顯示示,,但但它它沒沒有有Shape功能能。。適配配器器如何何讓讓TextView的接接口口轉(zhuǎn)轉(zhuǎn)換換成成為為Shape的接接口口,,有有兩兩種種方方法法::讓TextShape同時(shí)時(shí)繼繼承承Shape的接接口口和和TextView的服服務(wù)務(wù)((多多重重繼繼承承));;在TextShape中建建立立TextView的實(shí)實(shí)例例,,再再通通過過TextView給出出TextShape的接接口口。。前者者是是適適配配器器的的類類模模式式,,后后者者是是對(duì)對(duì)象象模模式式。。下下圖圖就就是是適適配配器器的的對(duì)對(duì)象象模模式式。。適配配器器(3)結(jié)構(gòu)構(gòu)::適適配配器器模模式式有有類類適適配配器器模模式式和和對(duì)對(duì)象象適適配配器器模模式式。。類類適適配配器器可可以以通通過過多多繼繼承承方方式式實(shí)實(shí)現(xiàn)現(xiàn)不不同同接接口口之之間間的的相相容容和和轉(zhuǎn)轉(zhuǎn)換換,,如如圖圖所所示示。。適配配器器而一一個(gè)個(gè)對(duì)對(duì)象象適適配配器器則則依依賴賴對(duì)對(duì)象象組組合合的的技技術(shù)術(shù)實(shí)實(shí)現(xiàn)現(xiàn)接接口口的的相相容容和和轉(zhuǎn)轉(zhuǎn)換換,,如如圖圖所所示示。。適配器(4)參與者職職責(zé)a)目標(biāo)(Target):定義義客戶使使用的與與應(yīng)用領(lǐng)領(lǐng)域相關(guān)關(guān)的接口口。b)客戶(Client):與具具有Target接口的對(duì)對(duì)象合作作。c)被匹配者者(Adaptee):需要要被轉(zhuǎn)換換匹配的的一個(gè)已已存在接接口。d)適配器((Adapter):將Adaptee的接口與與Target接口匹配配。適配器(5)協(xié)作:客客戶調(diào)用用Adapter對(duì)象的操操作,然然后Adapter的操作又又調(diào)用Adaptee對(duì)象中負(fù)負(fù)責(zé)處理理相應(yīng)請(qǐng)請(qǐng)求的操操作。責(zé)任鏈(1)目的:通通過一條條隱式的的對(duì)象消消息鏈傳傳遞處理理請(qǐng)求。。該請(qǐng)求求沿著這這條鏈傳傳遞,直直到有一一個(gè)對(duì)象象處理它它為止。。其核心心是避免免將請(qǐng)求求的發(fā)送送者直接接耦合到到它的接接受者。。(2)思路:以以GUI系統(tǒng)的聯(lián)聯(lián)機(jī)幫助助系統(tǒng)為為例。用用戶可以以在軟件件中任一一位置按按下help鍵,軟件件就可以以根據(jù)該該信息和和當(dāng)前上上下文環(huán)環(huán)境彈出出適當(dāng)?shù)牡恼f明。。如果用戶戶在PrintDialog對(duì)話框里里“打印印”按鈕鈕上按了了幫助鍵鍵,幫助助信息的的順序圖圖如圖所所示。責(zé)任鏈聯(lián)機(jī)幫助助系統(tǒng)定定義了一一個(gè)抽象象類HelpHandler和抽象操操作HandleHelp(),所有想想處理信信息的類類可以繼繼承該類類。HelpHandler的HandleHelp()操作的內(nèi)內(nèi)定做法法是把信信息傳遞遞給后繼繼者去處處理,由由各個(gè)子子類分別別來實(shí)現(xiàn)現(xiàn)具體的的打印功功能。如如圖所示示。責(zé)任鏈(3)結(jié)構(gòu):責(zé)責(zé)任鏈模模式的結(jié)結(jié)構(gòu)如圖圖所示。。責(zé)任鏈典型的對(duì)對(duì)象間的的結(jié)構(gòu)如如圖所示示。責(zé)任鏈(4)參與者職職責(zé)a)處理者((Handler):定義義處理請(qǐng)請(qǐng)求的接接口;實(shí)實(shí)現(xiàn)對(duì)后后繼者的的鏈接((可選))。b)具體處理理者(ConcreteHandler):處理理它所負(fù)負(fù)責(zé)的請(qǐng)請(qǐng)求;可可訪問它它的后繼繼;如果果它能夠夠處理請(qǐng)請(qǐng)求,就就處理該該請(qǐng)求,,否則將將請(qǐng)求傳傳送給后后繼者。。c)客戶(Client):將處處理請(qǐng)求求提交給給職責(zé)鏈

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論