版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
9.1軟件體系結(jié)構(gòu)的基本概念什么是體系結(jié)構(gòu)目前還沒有一個(gè)公認(rèn)的關(guān)于軟件體系結(jié)構(gòu)的定義,許多專家學(xué)者從不同角度對軟件體系結(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)件”的角色。目前一頁\總數(shù)九十一頁\編于五點(diǎn)DewaynePerry和A1exanderWo1f曾這樣定義:“軟件體系結(jié)構(gòu)是具有一定形式的結(jié)構(gòu)化元素,即構(gòu)件的集合,包括處理構(gòu)件、數(shù)據(jù)構(gòu)件和連接構(gòu)件。處理構(gòu)件負(fù)責(zé)對數(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)的基本概念目前二頁\總數(shù)九十一頁\編于五點(diǎn)1.模式軟件設(shè)計(jì)模式是從軟件設(shè)計(jì)過程中總結(jié)出來的,是針對特定問題的解決方案。建筑師C.Alexander對模式給出的經(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)格和框架的概念
目前三頁\總數(shù)九十一頁\編于五點(diǎn)(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)的低級模式,描述如何實(shí)現(xiàn)構(gòu)件的某些功能,或者利用編程語言的特性來實(shí)現(xiàn)構(gòu)件內(nèi)部要素之間的通信功能。9.1軟件體系結(jié)構(gòu)的基本概念目前四頁\總數(shù)九十一頁\編于五點(diǎn)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)的基本概念目前五頁\總數(shù)九十一頁\編于五點(diǎn)體系結(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)。對體系結(jié)構(gòu)風(fēng)格的研究和實(shí)踐為大粒度的軟件復(fù)用提供了可能。9.1軟件體系結(jié)構(gòu)的基本概念目前六頁\總數(shù)九十一頁\編于五點(diǎn)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框架。目前七頁\總數(shù)九十一頁\編于五點(diǎn)體系結(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)的重要作用目前八頁\總數(shù)九十一頁\編于五點(diǎn)當(dāng)輸入數(shù)據(jù)經(jīng)過一系列的計(jì)算和操作構(gòu)件的變換形成輸出數(shù)據(jù)時(shí),可以應(yīng)用這種體系結(jié)構(gòu)。管道/過濾器、批處理序列都屬于數(shù)據(jù)流風(fēng)格。管道/過濾器結(jié)構(gòu)如下圖所示。9.2典型的體系結(jié)構(gòu)風(fēng)格數(shù)據(jù)流風(fēng)格
管道/過濾器結(jié)構(gòu)
目前九頁\總數(shù)九十一頁\編于五點(diǎn)從上圖可看出,管道/過濾器結(jié)構(gòu)擁有一組被稱為過濾器(filter)的構(gòu)件,這些構(gòu)件通過管道(pipe)連接,管道將數(shù)據(jù)從一個(gè)構(gòu)件傳送到下一個(gè)構(gòu)件。每個(gè)過濾器獨(dú)立于其上游和下游的構(gòu)件而工作,過濾器的設(shè)計(jì)要針對某種形式的數(shù)據(jù)輸入,并且產(chǎn)生某種特定形式的數(shù)據(jù)輸出。如果數(shù)據(jù)流退化成為單線的變換,則稱為批處理序列(batchsequential)。這種結(jié)構(gòu)接收一批數(shù)據(jù),然后應(yīng)用一系列連續(xù)的構(gòu)件(過濾器)變換它。9.2典型的體系結(jié)構(gòu)風(fēng)格目前十頁\總數(shù)九十一頁\編于五點(diǎn)管道/過濾器風(fēng)格具有以下優(yōu)點(diǎn):(1)使得軟構(gòu)件具有良好的隱蔽性和高內(nèi)聚、低耦合的特點(diǎn)。(2)允許設(shè)計(jì)者將整個(gè)系統(tǒng)的輸入/輸出行為看成是多個(gè)過濾器的行為的簡單合成。(3)支持軟件復(fù)用。只要提供適合在兩個(gè)過濾器之間傳送的數(shù)據(jù),任何兩個(gè)過濾器都可被連接起來。(4)系統(tǒng)維護(hù)和增強(qiáng)系統(tǒng)性能簡單。新的過濾器可以添加到現(xiàn)有系統(tǒng)中來;舊的可以被改進(jìn)的過濾器替換掉。(5)允許對一些如吞吐量、死鎖等屬性的分析。(6)支持并行執(zhí)行。每個(gè)過濾器是作為一個(gè)單獨(dú)的任務(wù)完成,因此可與其他任務(wù)并行執(zhí)行。9.2典型的體系結(jié)構(gòu)風(fēng)格目前十一頁\總數(shù)九十一頁\編于五點(diǎn)管道/過濾器風(fēng)格主要缺點(diǎn)如下:(1)通常導(dǎo)致進(jìn)程成為批處理的結(jié)構(gòu)。這是因?yàn)殡m然過濾器可增量式地處理數(shù)據(jù),但它們是獨(dú)立的,所以設(shè)計(jì)者必須將每個(gè)過濾器看成一個(gè)完整的從輸入到輸出的轉(zhuǎn)換。(2)不適合處理交互的應(yīng)用。當(dāng)需要增量地顯示改變時(shí),這個(gè)問題尤為嚴(yán)重。(3)因?yàn)樵跀?shù)據(jù)傳輸上沒有通用的標(biāo)準(zhǔn),每個(gè)過濾器都增加了解析和合成數(shù)據(jù)的工作,這樣就導(dǎo)致了系統(tǒng)性能下降,并增加了編寫過濾器的復(fù)雜性。9.2典型的體系結(jié)構(gòu)風(fēng)格目前十二頁\總數(shù)九十一頁\編于五點(diǎn)在此類體系結(jié)構(gòu)中,存在以下3種子風(fēng)格。1.主程序/子程序體系結(jié)構(gòu)這種傳統(tǒng)的程序結(jié)構(gòu)將功能分解為一個(gè)控制層次,其中“主”程序調(diào)用一組程序構(gòu)件,這些程序構(gòu)件又去調(diào)用別的程序構(gòu)件,如下圖所示。這種結(jié)構(gòu)總體上為樹狀結(jié)構(gòu),可以在底層存在公共模塊。9.2典型的體系結(jié)構(gòu)風(fēng)格調(diào)用—返回風(fēng)格
目前十三頁\總數(shù)九十一頁\編于五點(diǎn)主程序/子程序體系結(jié)構(gòu)的優(yōu)點(diǎn)如下:(1)可以使用自頂向下,逐步分解的方法得到體系結(jié)構(gòu)圖,典型的拓?fù)浣Y(jié)構(gòu)為樹狀結(jié)構(gòu)?;诙x—使用關(guān)系對子程序進(jìn)行分解,使用過程調(diào)用作為程序之間的交互機(jī)制。(2)采用程序設(shè)計(jì)語言支持的單線程控制。其主要缺點(diǎn)如下:(1)子程序的正確性難于判斷。需要運(yùn)用層次推理來判斷子程序的正確性,因?yàn)樽映绦虻恼_性取決于它調(diào)用的子程序的正確性。(2)子系統(tǒng)的結(jié)構(gòu)不清晰。通??梢詫⒍鄠€(gè)子程序合成為模塊。9.2典型的體系結(jié)構(gòu)風(fēng)格目前十四頁\總數(shù)九十一頁\編于五點(diǎn)
2.面向?qū)ο箫L(fēng)格
系統(tǒng)的構(gòu)件封裝了數(shù)據(jù)和必須應(yīng)用到該數(shù)據(jù)上的操作,構(gòu)件間通過消息傳遞進(jìn)行通信與合作。與主程序/子程序的體系結(jié)構(gòu)相比,面向?qū)ο箫L(fēng)格中的對象交互會(huì)復(fù)雜一些。面向?qū)ο箫L(fēng)格與網(wǎng)絡(luò)應(yīng)用的需求在分布性、自治性、協(xié)作性、演化性等方面具有內(nèi)在的一致性。
面向?qū)ο箫L(fēng)格具有以下優(yōu)點(diǎn):(1)因?yàn)閷ο髮ζ渌麑ο箅[藏它的表示,所以可以改變一個(gè)對象的表示,而不影響其他對象。(2)設(shè)計(jì)者可將一些數(shù)據(jù)存取操作的問題分解成一些交互的代理程序的集合。9.2典型的體系結(jié)構(gòu)風(fēng)格目前十五頁\總數(shù)九十一頁\編于五點(diǎn)其缺點(diǎn)如下:(1)為了使一個(gè)對象和另一個(gè)對象通過過程調(diào)用等進(jìn)行交互,必須知道對象的標(biāo)識。只要一個(gè)對象的標(biāo)識改變了,就必須修改所有其他明確調(diào)用它的對象。(2)必須修改所有顯式調(diào)用它的其他對象,并消除由此帶來的一些副作用。例如,如果A使用了對象B,C也使用了對象B,那么,C對B的使用所造成的對A的影響可能是料想不到的。9.2典型的體系結(jié)構(gòu)風(fēng)格目前十六頁\總數(shù)九十一頁\編于五點(diǎn)3.層次結(jié)構(gòu)層次結(jié)構(gòu)的基本結(jié)構(gòu)如下圖所示。在這種體系結(jié)構(gòu)中,整個(gè)系統(tǒng)被組織成一個(gè)分層結(jié)構(gòu),每一層為上層提供服務(wù),并作為下一層的客戶。9.2典型的體系結(jié)構(gòu)風(fēng)格目前十七頁\總數(shù)九十一頁\編于五點(diǎn)這種風(fēng)格支持基于可增加抽象層的設(shè)計(jì)。允許將復(fù)雜問題分解成一個(gè)增量步驟序列的實(shí)現(xiàn)。由于每一層最多只影響兩層,同時(shí)只要給相鄰層提供相同的接口,允許每層用不同的方法實(shí)現(xiàn),同樣為軟件復(fù)用提供了強(qiáng)大的支持。層次結(jié)構(gòu)具有以下優(yōu)點(diǎn):(1)支持基于抽象程度遞增的系統(tǒng)設(shè)計(jì),使設(shè)計(jì)者可以把一個(gè)復(fù)雜系統(tǒng)按遞增的步驟進(jìn)行分解。(2)支持功能增強(qiáng),因?yàn)槊恳粚又炼嗪拖噜彽纳舷聦咏换?,因此,功能的改變最多影響相鄰的?nèi)外層。9.2典型的體系結(jié)構(gòu)風(fēng)格目前十八頁\總數(shù)九十一頁\編于五點(diǎn)(3)支持復(fù)用。只要提供的服務(wù)接口定義不變,同一層的不同實(shí)現(xiàn)可以交換使用。這樣,就可以定義一組標(biāo)準(zhǔn)的接口,從而允許各種不同的實(shí)現(xiàn)方法。其缺點(diǎn)如下:(1)并不是每個(gè)系統(tǒng)都可以很容易地劃分為分層的模式,甚至即使一個(gè)系統(tǒng)的邏輯結(jié)構(gòu)是層次化的,出于對系統(tǒng)性能的考慮,系統(tǒng)設(shè)計(jì)師不得不把一些低級或高級的功能綜合起來。(2)很難找到一個(gè)合適的、正確的層次抽象方法。9.2典型的體系結(jié)構(gòu)風(fēng)格目前十九頁\總數(shù)九十一頁\編于五點(diǎn)數(shù)據(jù)庫系統(tǒng)、超文本系統(tǒng)和黑板系統(tǒng)都屬于倉庫風(fēng)格。在這種風(fēng)格中,數(shù)據(jù)倉庫(如文件或數(shù)據(jù)庫)位于這種體系結(jié)構(gòu)的中心,其他構(gòu)件會(huì)經(jīng)常訪問該數(shù)據(jù)倉庫,并對倉庫中的數(shù)據(jù)進(jìn)行增加、修改或刪除操作。右圖為一個(gè)典型的倉庫風(fēng)格的體系結(jié)構(gòu)。9.2典型的體系結(jié)構(gòu)風(fēng)格倉庫風(fēng)格
目前二十頁\總數(shù)九十一頁\編于五點(diǎn)上圖中,可把中心存儲庫變換成“黑板”,黑板構(gòu)件負(fù)責(zé)協(xié)調(diào)信息在客戶間的傳遞,當(dāng)用戶感興趣的數(shù)據(jù)發(fā)生變化時(shí),它將通知客戶軟件。黑板系統(tǒng)的組成如下圖所示。黑板系統(tǒng)的傳統(tǒng)應(yīng)用是信號處理領(lǐng)域,如語音和模式識別。另一應(yīng)用是松耦合代理數(shù)據(jù)共享存取。9.2典型的體系結(jié)構(gòu)風(fēng)格目前二十一頁\總數(shù)九十一頁\編于五點(diǎn)特定的應(yīng)用還需要特定的體系結(jié)構(gòu)模型。這些體系結(jié)構(gòu)模型稱為領(lǐng)域相關(guān)的體系結(jié)構(gòu)。有兩種領(lǐng)域相關(guān)的體系結(jié)構(gòu)模型:類屬模型(genericmodel)和參考模型(referencemodel)。9.3特定領(lǐng)域的軟件體系結(jié)構(gòu)目前二十二頁\總數(shù)九十一頁\編于五點(diǎn)9.3特定領(lǐng)域的軟件體系結(jié)構(gòu)類屬模型
類屬模型是從許多實(shí)際系統(tǒng)中抽象出來的一般模型,它封裝了這些系統(tǒng)的主要特征。例如,許多圖書館開發(fā)了自己的圖書館館藏/流通系統(tǒng),若把它們的共同功能抽取出來并創(chuàng)建一個(gè)讓所有圖書館都認(rèn)可的系統(tǒng)體系結(jié)構(gòu)模型,這就是類屬模型。目前二十三頁\總數(shù)九十一頁\編于五點(diǎn)9.3特定領(lǐng)域的軟件體系結(jié)構(gòu)類屬模型的一個(gè)最著名的例子是編譯器模型,由這個(gè)模型已開發(fā)出了數(shù)以千計(jì)的編譯器。
目前二十四頁\總數(shù)九十一頁\編于五點(diǎn)參考模型源于對應(yīng)用領(lǐng)域的研究,它描述了一個(gè)理想化的包含了系統(tǒng)應(yīng)具有的所有特征的軟件體系結(jié)構(gòu)。它是更抽象且是描述一大類系統(tǒng)的模型,并且也是對設(shè)計(jì)者有關(guān)某類系統(tǒng)的一般結(jié)構(gòu)的指導(dǎo)。
9.3特定領(lǐng)域的軟件體系結(jié)構(gòu)參考模型
目前二十五頁\總數(shù)九十一頁\編于五點(diǎn)9.3特定領(lǐng)域的軟件體系結(jié)構(gòu)參考模型的典型例子是開放式系統(tǒng)互聯(lián)(OSI)參考模型。目前二十六頁\總數(shù)九十一頁\編于五點(diǎn)9.3特定領(lǐng)域的軟件體系結(jié)構(gòu)以上兩種不同類型的模型之間并不存在嚴(yán)格的區(qū)別,也可以將類屬模型視為參考模型。區(qū)別之一是類屬模型可以直接在設(shè)計(jì)中復(fù)用,而參考模型一般是用于領(lǐng)域概念間的交流和對可能的體系結(jié)構(gòu)做出比較。另外,類屬模型通常是經(jīng)過“自下而上”地對已有系統(tǒng)的抽象,而參考模型是“由上到下”地產(chǎn)生的。目前二十七頁\總數(shù)九十一頁\編于五點(diǎn)9.4分布式系統(tǒng)結(jié)構(gòu)在集中式計(jì)算技術(shù)時(shí)代廣泛使用的是大型機(jī)/小型機(jī)計(jì)算模型。20世紀(jì)80年代以后,集中式結(jié)構(gòu)逐漸被以PC為主的微機(jī)網(wǎng)絡(luò)所取代。個(gè)人計(jì)算機(jī)和工作站的采用,永遠(yuǎn)改變了大型機(jī)/小型機(jī)計(jì)算模型,從而產(chǎn)生了分布式計(jì)算模型。目前二十八頁\總數(shù)九十一頁\編于五點(diǎn)9.4分布式系統(tǒng)結(jié)構(gòu)分布式計(jì)算模型主要具有以下優(yōu)點(diǎn):(1)資源共享。分布式系統(tǒng)允許硬件、軟件等資源共享使用。(2)經(jīng)濟(jì)性。(3)性能與可擴(kuò)展性。(4)固有分布性。(5)健壯性。目前二十九頁\總數(shù)九十一頁\編于五點(diǎn)分布式系統(tǒng)的一個(gè)最簡單的模型是多處理器系統(tǒng),系統(tǒng)由許多進(jìn)程組成,這些進(jìn)程可以在不同的處理器上并行運(yùn)行,可以極大地提高系統(tǒng)的性能。由于大型實(shí)時(shí)系統(tǒng)對響應(yīng)時(shí)間要求較高,這種模型在大型實(shí)時(shí)系統(tǒng)中比較常見。大型實(shí)時(shí)系統(tǒng)需要實(shí)時(shí)采集信息,并利用采集到的信息進(jìn)行決策,然后發(fā)送信號給執(zhí)行機(jī)構(gòu)。雖然,信息采集、決策制定和執(zhí)行控制這些進(jìn)程可以在同一臺處理器上統(tǒng)一調(diào)度執(zhí)行,但使用多處理器能夠提高系統(tǒng)性能。9.4分布式系統(tǒng)結(jié)構(gòu)多處理器體系結(jié)構(gòu)
目前三十頁\總數(shù)九十一頁\編于五點(diǎn)客戶機(jī)/服務(wù)器(client/server,C/S)體系結(jié)構(gòu)是基于資源不對等,且為實(shí)現(xiàn)共享而提出來的,由服務(wù)器、客戶機(jī)和網(wǎng)絡(luò)三部分組成。在C/S體系結(jié)構(gòu)中,客戶機(jī)可以通過遠(yuǎn)程調(diào)用來獲取服務(wù)器提供的服務(wù),因此,客戶機(jī)必須知道可用的服務(wù)器的名字及它們所提供的服務(wù),而服務(wù)器不需要知道客戶機(jī)的身份,也不需要知道有多少臺服務(wù)器在運(yùn)行。
9.4分布式系統(tǒng)結(jié)構(gòu)客戶/服務(wù)器體系結(jié)構(gòu)
目前三十一頁\總數(shù)九十一頁\編于五點(diǎn)9.4分布式系統(tǒng)結(jié)構(gòu)傳統(tǒng)的C/S體系結(jié)構(gòu)分為兩層。在這種體系結(jié)構(gòu)中,一個(gè)應(yīng)用系統(tǒng)被劃分為客戶機(jī)和服務(wù)器兩部分。典型的兩層C/S體系結(jié)構(gòu)如下圖所示。目前三十二頁\總數(shù)九十一頁\編于五點(diǎn)兩層C/S體系結(jié)構(gòu)可以有兩種形態(tài):(1)瘦客戶機(jī)模型。在瘦客戶機(jī)模型中,數(shù)據(jù)管理部分和應(yīng)用邏輯都在服務(wù)器上執(zhí)行,客戶機(jī)只負(fù)責(zé)表示部分。瘦客戶機(jī)模型的主要缺點(diǎn):它將繁重的處理負(fù)荷都放在了服務(wù)器和網(wǎng)絡(luò)上,服務(wù)器負(fù)責(zé)所有的計(jì)算,這將增加客戶機(jī)和服務(wù)器之間的網(wǎng)絡(luò)流量。目前個(gè)人計(jì)算機(jī)所具有的處理能力在瘦客戶機(jī)模型中用不上。9.4分布式系統(tǒng)結(jié)構(gòu)目前三十三頁\總數(shù)九十一頁\編于五點(diǎn)(2)胖客戶機(jī)模型。在這種模型中,服務(wù)器只負(fù)責(zé)對數(shù)據(jù)的管理??蛻魴C(jī)上的軟件實(shí)現(xiàn)應(yīng)用邏輯和與系統(tǒng)用戶的交互。胖客戶機(jī)模型能夠利用客戶機(jī)的處理能力,比瘦客戶機(jī)模型在分布處理上更有效。但另一方面,隨著企業(yè)規(guī)模的日益擴(kuò)大,軟件的復(fù)雜程度不斷提高,胖客戶機(jī)模型逐漸暴露出了以下缺點(diǎn):開發(fā)成本較高。用戶界面風(fēng)格不一,使用繁雜,不利于推廣使用。軟件移植困難。軟件維護(hù)和升級困難。9.4分布式系統(tǒng)結(jié)構(gòu)目前三十四頁\總數(shù)九十一頁\編于五點(diǎn)為了解決以上問題,三層C/S體系結(jié)構(gòu)應(yīng)運(yùn)而生。三層C/S體系結(jié)構(gòu)中增加了應(yīng)用服務(wù)器??梢詫⒄麄€(gè)應(yīng)用邏輯駐留在應(yīng)用服務(wù)器上,而只有表示層存在于客戶機(jī)上。9.4分布式系統(tǒng)結(jié)構(gòu)目前三十五頁\總數(shù)九十一頁\編于五點(diǎn)三層C/S體系結(jié)構(gòu)將整個(gè)系統(tǒng)分成表示層、應(yīng)用邏輯層和數(shù)據(jù)層三個(gè)部分,其數(shù)據(jù)處理流程如下圖所示。9.4分布式系統(tǒng)結(jié)構(gòu)目前三十六頁\總數(shù)九十一頁\編于五點(diǎn)9.4分布式系統(tǒng)結(jié)構(gòu)(1)表示層:表示層是應(yīng)用系統(tǒng)的用戶界面部分,擔(dān)負(fù)著用戶與應(yīng)用程序之間的對話功能。它用于檢查用戶從鍵盤等輸入的數(shù)據(jù),顯示應(yīng)用程序輸出的數(shù)據(jù),一般采用圖形用戶界面(graphicuserinterface,GUI)。(2)應(yīng)用邏輯層:應(yīng)用邏輯層為應(yīng)用系統(tǒng)的主體部分,包含具體的業(yè)務(wù)處理邏輯。通常在功能層中包含有確認(rèn)用戶對應(yīng)用和數(shù)據(jù)庫存取權(quán)限的功能以及記錄系統(tǒng)處理日志的功能。(3)數(shù)據(jù)層:數(shù)據(jù)層主要包括數(shù)據(jù)的存儲及對數(shù)據(jù)的存取操作,一般選擇關(guān)系型數(shù)據(jù)庫管理系統(tǒng)(RDBMS)。目前三十七頁\總數(shù)九十一頁\編于五點(diǎn)
瀏覽器/服務(wù)器(browser/server,B/S)風(fēng)格是三層體系結(jié)構(gòu)的一種實(shí)現(xiàn)方式,其具體結(jié)構(gòu)為瀏覽器/Web服務(wù)器/數(shù)據(jù)庫服務(wù)器。B/S體系結(jié)構(gòu)如下圖所示。9.4分布式系統(tǒng)結(jié)構(gòu)目前三十八頁\總數(shù)九十一頁\編于五點(diǎn)B/S體系結(jié)構(gòu)主要是利用不斷成熟的WWW瀏覽器技術(shù),結(jié)合瀏覽器的多種腳本語言,用通用瀏覽器就實(shí)現(xiàn)了原來需要復(fù)雜的專用軟件才能實(shí)現(xiàn)的強(qiáng)大功能,并節(jié)約了開發(fā)成本。從某種程度上來說,B/S結(jié)構(gòu)是一種全新的軟件體系結(jié)構(gòu)。B/S體系結(jié)構(gò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)一服務(wù)的最現(xiàn)實(shí)的開放性基礎(chǔ)。
9.4分布式系統(tǒng)結(jié)構(gòu)目前三十九頁\總數(shù)九十一頁\編于五點(diǎn)與C/S體系結(jié)構(gòu)相比,B/S體系結(jié)構(gòu)也有許多不足之處。(1)B/S體系結(jié)構(gòu)缺乏對動(dòng)態(tài)頁面的支持能力,沒有集成有效的數(shù)據(jù)庫處理功能。(2)采用B/S體系結(jié)構(gòu)的應(yīng)用系統(tǒng),在數(shù)據(jù)查詢等響應(yīng)速度上,要遠(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)結(jié)構(gòu)目前四十頁\總數(shù)九十一頁\編于五點(diǎn)在客戶機(jī)/服務(wù)器模型中,客戶機(jī)和服務(wù)器的地位是不同的。為了消除客戶機(jī)與服務(wù)器之間的差別,提高系統(tǒng)的伸縮性以及有效地均衡負(fù)載,可采用分布式對象體系結(jié)構(gòu)來設(shè)計(jì)系統(tǒng)。
分布式對象的實(shí)質(zhì)是在分布式異構(gòu)環(huán)境下建立應(yīng)用系統(tǒng)框架和對象構(gòu)件,它將應(yīng)用服務(wù)分割成具有完整邏輯含義的獨(dú)立子模塊(稱為構(gòu)件),各個(gè)子模塊可放在同一臺服務(wù)器或分布在多臺服務(wù)器上運(yùn)行,模塊之間通過中間件互相通信。9.4分布式系統(tǒng)結(jié)構(gòu)分布式對象體系結(jié)構(gòu)
目前四十一頁\總數(shù)九十一頁\編于五點(diǎn)通常將這個(gè)中間件稱為軟件總線或?qū)ο笳埱蟠?,它的作用是在對象之間提供一個(gè)無縫接口。9.4分布式系統(tǒng)結(jié)構(gòu)
分布式對象技術(shù)的應(yīng)用目的是為了降低主服務(wù)器的負(fù)荷、共享網(wǎng)絡(luò)資源、平衡網(wǎng)絡(luò)中計(jì)算機(jī)業(yè)務(wù)處理的分配,提高計(jì)算機(jī)系統(tǒng)協(xié)同處理的能力,從而使應(yīng)用的實(shí)現(xiàn)更為靈活。目前四十二頁\總數(shù)九十一頁\編于五點(diǎn)分布式對象技術(shù)的基礎(chǔ)是構(gòu)件。構(gòu)件是一些獨(dú)立的代碼封裝體,在分布計(jì)算的環(huán)境下可以是一個(gè)簡單的對象,但大多數(shù)情況下是一組相關(guān)的對象組合體,提供一定的服務(wù)。分布式環(huán)境下,構(gòu)件是一些靈活的軟件模塊,它們可以位置透明、語言獨(dú)立和平臺獨(dú)立地互相發(fā)送消息,實(shí)現(xiàn)請求服務(wù)。構(gòu)件之間并不存在客戶機(jī)與服務(wù)器的界限,接受服務(wù)者扮演客戶機(jī)的角色,提供服務(wù)者就是服務(wù)器。9.4分布式系統(tǒng)結(jié)構(gòu)目前四十三頁\總數(shù)九十一頁\編于五點(diǎn)9.4分布式系統(tǒng)結(jié)構(gòu)當(dāng)前主流的分布式對象技術(shù)規(guī)范有OMG的CORBA、Microsoft公司的.NET和Sun公司的J2EE。它們都支持服務(wù)端構(gòu)件的開發(fā),都有其各自的特點(diǎn)。目前四十四頁\總數(shù)九十一頁\編于五點(diǎn)代理可以用于構(gòu)建帶有隔離組件的分布式軟件系統(tǒng),該軟件通過遠(yuǎn)程服務(wù)調(diào)用進(jìn)行交互。代理者負(fù)責(zé)協(xié)調(diào)通信,諸如轉(zhuǎn)發(fā)請求以及傳遞結(jié)果和異常等。1991年,OMG基于面向?qū)ο蠹夹g(shù),給出了以對象請求代理(ORB)為中心的分布式應(yīng)用體系結(jié)構(gòu)。9.4分布式系統(tǒng)結(jié)構(gòu)代理
目前四十五頁\總數(shù)九十一頁\編于五點(diǎn)在OMG的對象管理結(jié)構(gòu)中,ORB是一個(gè)關(guān)鍵的通信機(jī)制,它以實(shí)現(xiàn)互操作性為主要目標(biāo),處理對象之間的消息分布。在ORB之上有4個(gè)對象接口:(1)對象服務(wù):定義加入ORB的系統(tǒng)級服務(wù),如安全性、命名和事務(wù)處理,它們是與應(yīng)用領(lǐng)域無關(guān)的。(2)公共設(shè)施:水平級的服務(wù),定義應(yīng)用程序級服務(wù)。(3)領(lǐng)域接口:面向特定的領(lǐng)域。(4)應(yīng)用接口:面向指定的現(xiàn)實(shí)世界應(yīng)用。是指供應(yīng)商或用戶借助于ORB、公共對象服務(wù)及公共設(shè)施而開發(fā)的特定產(chǎn)品。9.4分布式系統(tǒng)結(jié)構(gòu)目前四十六頁\總數(shù)九十一頁\編于五點(diǎn)MVC框架即模型—視圖—控制器(model-view-controller)框架,它強(qiáng)調(diào)將用戶輸入、數(shù)據(jù)模型和數(shù)據(jù)表示的方式分開設(shè)計(jì),一個(gè)交互式應(yīng)用系統(tǒng)由模型、視圖和控制器3個(gè)部件組成,分別對應(yīng)于內(nèi)部數(shù)據(jù)、數(shù)據(jù)表示和輸入/輸出控制部分。
9.5體系結(jié)構(gòu)框架MVC框架
目前四十七頁\總數(shù)九十一頁\編于五點(diǎn)9.5體系結(jié)構(gòu)框架MVC框架目前四十八頁\總數(shù)九十一頁\編于五點(diǎn)1.模型對象模型對象獨(dú)立于外在顯示內(nèi)容和形式,代表應(yīng)用領(lǐng)域中的業(yè)務(wù)實(shí)體和業(yè)務(wù)規(guī)則,是整個(gè)模型的核心。模型對象的變化通過事件處理通知視圖和控制器對象。2.視圖對象視圖對象代表GUI對象,并且以用戶需要的格式表示模型狀態(tài),是交互系統(tǒng)與外界的接口。視圖對象可以包含子視圖,子視圖用于顯示模型的不同部分。通常,每個(gè)視圖對象對應(yīng)一個(gè)控制器對象。9.5體系結(jié)構(gòu)框架目前四十九頁\總數(shù)九十一頁\編于五點(diǎn)3.控制器對象控制器對象代表鼠標(biāo)和鍵盤事件。它處理用戶的輸入行為并給模型發(fā)送業(yè)務(wù)事件,再將業(yè)務(wù)事件解析為模型應(yīng)執(zhí)行的動(dòng)作;同時(shí),模型的更新與修改也將通過控制器來通知視圖,從而保持各個(gè)視圖與模型的一致性。
9.5體系結(jié)構(gòu)框架目前五十頁\總數(shù)九十一頁\編于五點(diǎn)9.5體系結(jié)構(gòu)框架MVC的處理過程為:首先控制器接收用戶的請求,并決定應(yīng)該調(diào)用哪個(gè)模型來進(jìn)行處理;然后模型用業(yè)務(wù)邏輯來處理用戶的請求并返回?cái)?shù)據(jù);最后控制器用相應(yīng)的視圖格式化模型返回的數(shù)據(jù),并通過表示層呈現(xiàn)給用戶。其中,模型是核心數(shù)據(jù)和功能,視圖只關(guān)心顯示數(shù)據(jù),控制只關(guān)心用戶輸入,這種結(jié)構(gòu)由于將數(shù)據(jù)和業(yè)務(wù)規(guī)則從表示層分開,因此可以最大化地重用代碼。
目前五十一頁\總數(shù)九十一頁\編于五點(diǎn)J2EE的核心體系結(jié)構(gòu)就是在MVC框架的基礎(chǔ)上進(jìn)行擴(kuò)展得到的,如下圖所示。9.5體系結(jié)構(gòu)框架J2EE體系結(jié)構(gòu)框架
J2EE的核心體系結(jié)構(gòu)框架
目前五十二頁\總數(shù)九十一頁\編于五點(diǎn)客戶層:用戶通過客戶層與系統(tǒng)交互。該層可以是各種類型的客戶端。例如,可編程客戶端(如基于JavaSwing的客戶端或applet),純Web瀏覽器客戶端,WML移動(dòng)客戶端等。資源層:資源層可以是企業(yè)數(shù)據(jù)庫,電子商務(wù)解決方案中的外部企業(yè)系統(tǒng),或者是外部SOA服務(wù)。數(shù)據(jù)可以分布在多個(gè)服務(wù)器上。從上圖可看出,J2EE模型是分層結(jié)構(gòu),中間的3層(表示層,業(yè)務(wù)層,集成層)包含應(yīng)用程序構(gòu)件,客戶層和資源層處于應(yīng)用程序的外圍。
9.5體系結(jié)構(gòu)框架目前五十三頁\總數(shù)九十一頁\編于五點(diǎn)表示層:也稱為Web層或服務(wù)器端表示層,用戶通過表示層來訪問應(yīng)用程序。在基于Web的應(yīng)用系統(tǒng)中,表示層由用戶界面代碼和運(yùn)行于Web服務(wù)器或應(yīng)用服務(wù)器上的過程組成。參考MVC框架,表示層包括視圖構(gòu)件和控制器構(gòu)件。業(yè)務(wù)層:業(yè)務(wù)層包含表示層中的控制器構(gòu)件沒有實(shí)現(xiàn)的一部分應(yīng)用邏輯。它負(fù)責(zé)確認(rèn)和執(zhí)行企業(yè)范圍內(nèi)的業(yè)務(wù)規(guī)則和事務(wù),并管理從資源層加載到應(yīng)用程序高速緩存中的業(yè)務(wù)對象。集成層:集成層負(fù)責(zé)建立和維護(hù)與數(shù)據(jù)源的連接。例如,通過JDBC與數(shù)據(jù)庫進(jìn)行通信,利用Java消息服務(wù)(JMS)與外部系統(tǒng)聯(lián)合。9.5體系結(jié)構(gòu)框架目前五十四頁\總數(shù)九十一頁\編于五點(diǎn)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è)預(yù)定義包:實(shí)體(entity)包和中介者(mediator)包。
PCMEF框架中包的依賴性主要是向下依賴性。表示層依賴于控制層,控制層依賴于領(lǐng)域?qū)?,中介者包依賴于?shí)體包和基礎(chǔ)層,如下圖所示。
PCMEF與PCBMER框架
9.5體系結(jié)構(gòu)框架目前五十五頁\總數(shù)九十一頁\編于五點(diǎn)表示層:包含定義GUI對象的類??刂茖?處理表示層的請求,負(fù)責(zé)大多數(shù)程序邏輯、算法、主要計(jì)算以及為每個(gè)用戶維持會(huì)話狀態(tài)。
領(lǐng)域?qū)?其實(shí)體包處理控制請求,中介者包用于創(chuàng)建一個(gè)協(xié)調(diào)實(shí)體類和基礎(chǔ)類的通信通道?;A(chǔ)層:負(fù)責(zé)與數(shù)據(jù)庫和Web服務(wù)的所有通信。
9.5體系結(jié)構(gòu)框架PCMEF框架
目前五十六頁\總數(shù)九十一頁\編于五點(diǎn)2.PCBMER框架
PCBMER框架由PCMEF框架擴(kuò)展而成,代表著表示—控制器—Bean—中介者—實(shí)體—資源(presentation-control-bean-mediator-entity-resource,PCBMER)。其核心體系結(jié)構(gòu)框架如右圖所示。
9.5體系結(jié)構(gòu)框架PCBMER的核心框架
目前五十七頁\總數(shù)九十一頁\編于五點(diǎn)在上圖中,把層表示為UML包(子系統(tǒng),層),帶箭頭的虛線表示依賴關(guān)系。例如,表示層依賴控制器層和bean層,控制器層依賴bean層。PCBMER的層次不是嚴(yán)格線性的,上層可以依賴多個(gè)相鄰下層。bean層:表示那些預(yù)先確定要呈現(xiàn)在用戶界面上的數(shù)據(jù)類和值對象。除了用戶輸入外,bean數(shù)據(jù)由實(shí)體對象(實(shí)體層)創(chuàng)建。表示層:表示屏幕以及呈現(xiàn)bean對象的UI對象??刂破鲗樱罕硎緫?yīng)用邏輯。實(shí)體層:響應(yīng)控制器和中介者。中介者層:建立了充當(dāng)實(shí)體類和資源類媒介的通信管道。資源層:負(fù)責(zé)所有與外部持久數(shù)據(jù)資源(數(shù)據(jù)庫、Web服務(wù)等)的通信。
9.5體系結(jié)構(gòu)框架目前五十八頁\總數(shù)九十一頁\編于五點(diǎn)面向?qū)ο笤O(shè)計(jì)模式最初出現(xiàn)于70年代末80年代初。
ErichGamma等4人合著的“DesignPatterns:ElementsofReusableObject-OrientedSoftware”被認(rèn)為是設(shè)計(jì)模式方面的經(jīng)典著作。目前,設(shè)計(jì)模式已經(jīng)被廣泛應(yīng)用于多種領(lǐng)域的軟件設(shè)計(jì)和構(gòu)造中,許多當(dāng)代的先進(jìn)軟件中已大量采用了軟件設(shè)計(jì)模式的概念。9.6設(shè)計(jì)模式目前五十九頁\總數(shù)九十一頁\編于五點(diǎn)9.6設(shè)計(jì)模式一般來說,一個(gè)模式有4個(gè)基本的要素:模式名稱:用于描述模式的名字,說明模式的問題、解決方案和效果。問題:說明在何種場合使用模式。解決方案:描述設(shè)計(jì)的組成成分、它們之間的相互關(guān)系、各自的職責(zé)和合作方式。效果:描述了模式使用的效果及使用模式應(yīng)當(dāng)權(quán)衡的問題。
目前六十頁\總數(shù)九十一頁\編于五點(diǎn)抽象工廠(1)目的:提供一個(gè)接口用以創(chuàng)建一個(gè)相聯(lián)系或相依賴的對象族,而無須指定它們的具體類。(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)格的組件。目前六十一頁\總數(shù)九十一頁\編于五點(diǎn)抽象工廠解決方法是:先定義一個(gè)抽象類WidgetFactory(用斜體字區(qū)分抽象類),這個(gè)類聲明了創(chuàng)建各種基本組件的接口,再逐一替各種基本組件定義相對應(yīng)的抽象類,如ScrollBar、Window等,讓它們的具體子類來真正實(shí)現(xiàn)特定的GUI標(biāo)準(zhǔn)。目前六十二頁\總數(shù)九十一頁\編于五點(diǎn)抽象工廠可支持多種GUI標(biāo)準(zhǔn)的繪圖用戶界面工具包的結(jié)構(gòu)圖
目前六十三頁\總數(shù)九十一頁\編于五點(diǎn)抽象工廠(3)結(jié)構(gòu):抽象工廠模式的結(jié)構(gòu)如圖所示。目前六十四頁\總數(shù)九十一頁\編于五點(diǎn)抽象工廠(4)參與者職責(zé)a)抽象工廠類(AbstractFactory):聲明創(chuàng)建抽象產(chǎn)品對象的操作的接口。b)具體工廠類(ConcreteFactory):實(shí)現(xiàn)產(chǎn)生具體產(chǎn)品對象的操作。c)抽象產(chǎn)品類(AbstractProduct):聲明一種產(chǎn)品對象的接口。d)具體產(chǎn)品類(ConcreteProduct):定義將被相應(yīng)的具體工廠類產(chǎn)生的產(chǎn)品對象,并實(shí)現(xiàn)抽象產(chǎn)品類接口。e)客戶(Client):僅使用由抽象工廠類和抽象產(chǎn)品類聲明的接口。目前六十五頁\總數(shù)九十一頁\編于五點(diǎn)抽象工廠(5)協(xié)作在執(zhí)行時(shí),AbstractFactory將產(chǎn)品交給ConcreteFactory創(chuàng)建。ConcreteFactory類的實(shí)例只有一個(gè),專門針對某種特定的實(shí)現(xiàn)標(biāo)準(zhǔn),建立具體可用的產(chǎn)品對象。如果想要建立其他標(biāo)準(zhǔn)的產(chǎn)品對象,客戶程序就得改用另一種ConcreteFactory。目前六十六頁\總數(shù)九十一頁\編于五點(diǎn)單件(1)目的:一個(gè)類只有一個(gè)實(shí)例并提供一個(gè)訪問它的全局訪問點(diǎn)。該實(shí)例應(yīng)在系統(tǒng)生存期中都存在。(2)思路:例如,通常情況下,用戶可以對應(yīng)用系統(tǒng)進(jìn)行配置,并將配置信息保存在配置文件中,應(yīng)用系統(tǒng)在啟動(dòng)時(shí)首先將配置文件加載到內(nèi)存中,這些內(nèi)存配置信息應(yīng)該有且僅有一份。應(yīng)用單件模式可以保證Configure類只能有一個(gè)實(shí)例。
目前六十七頁\總數(shù)九十一頁\編于五點(diǎn)單件(3)結(jié)構(gòu):單件模式的結(jié)構(gòu)如圖所示。目前六十八頁\總數(shù)九十一頁\編于五點(diǎn)單件(4)參與者職責(zé)a)單件(Singleton):能夠創(chuàng)建它唯一的實(shí)例;同時(shí)定義了一個(gè)Instance操作,允許外部存取它唯一的實(shí)例。Instance是一個(gè)靜態(tài)成員函數(shù)(5)協(xié)作:客戶只能通過Singleton的Instance()存取這唯一的實(shí)例。目前六十九頁\總數(shù)九十一頁\編于五點(diǎn)外觀(1)目的:給子系統(tǒng)中的一組接口提供一套統(tǒng)一的高層界面,使得子系統(tǒng)更容易使用。(2)思路:將系統(tǒng)劃分為若干子系統(tǒng),雖然可以降低整體的復(fù)雜性,但還需設(shè)法降低子系統(tǒng)之間的通信和相互的依賴性。一種方法就是引進(jìn)一個(gè)外觀(facade)對象,為子系統(tǒng)內(nèi)各種設(shè)施提供一個(gè)簡單的單一界面。目前七十頁\總數(shù)九十一頁\編于五點(diǎn)外觀(3)結(jié)構(gòu):外觀模式的結(jié)構(gòu)如圖所示。目前七十一頁\總數(shù)九十一頁\編于五點(diǎn)外觀(4)參與者職責(zé)a)外觀(Fa?ade):知道子系統(tǒng)中哪個(gè)類負(fù)責(zé)處理哪種信息;并負(fù)責(zé)把外界輸入的信息轉(zhuǎn)交給適當(dāng)?shù)淖酉到y(tǒng)對象。b)子系統(tǒng)中的類(subsystemclasses):實(shí)現(xiàn)子系統(tǒng)的功能;處理Facade對象分派的工作;如果不受Facade的控制,則也不會(huì)有返回Facade的引用存在。(5)協(xié)作:使用Facade的客戶不用直接訪問子系統(tǒng)對象。外界想與子系統(tǒng)交互時(shí),把信息傳送給Facade,F(xiàn)acade再把這些信息轉(zhuǎn)交給適當(dāng)?shù)淖酉到y(tǒng)對象。雖然實(shí)際處理工作是子系統(tǒng)對象在做,但Facade會(huì)居中做接口轉(zhuǎn)換工作。目前七十二頁\總數(shù)九十一頁\編于五點(diǎn)適配器(1)目的:適配器模式將一個(gè)類的接口轉(zhuǎn)換為客戶期望的另一種接口,使得原本不匹配的接口而無法合作的類可以一起工作。(2)思路:有時(shí)要將兩個(gè)沒有關(guān)系的類組合在一起使用,一種解決方案是修改各自類的接口,另一種辦法是使用Adapter模式,在兩種接口之間創(chuàng)建一個(gè)混合接口。例如,設(shè)有一個(gè)圖形編輯器,可畫直線、多邊形、文本等。它的接口定義成抽象類Shape,它的子類負(fù)責(zé)畫各種圖形。此外,還有一個(gè)外購的GUI軟件包TextView,用于顯示,但它沒有Shape功能。目前七十三頁\總數(shù)九十一頁\編于五點(diǎn)適配器如何讓TextView的接口轉(zhuǎn)換成為Shape的接口,有兩種方法:讓TextShape同時(shí)繼承Shape的接口和TextView的服務(wù)(多重繼承);在TextShape中建立TextView的實(shí)例,再通過TextView給出TextShape的接口。前者是適配器的類模式,后者是對象模式。下圖就是適配器的對象模式。目前七十四頁\總數(shù)九十一頁\編于五點(diǎn)適配器(3)結(jié)構(gòu):適配器模式有類適配器模式和對象適配器模式。類適配器可以通過多繼承方式實(shí)現(xiàn)不同接口之間的相容和轉(zhuǎn)換,如圖所示。目前七十五頁\總數(shù)九十一頁\編于五點(diǎn)適配器而一個(gè)對象適配器則依賴對象組合的技術(shù)實(shí)現(xiàn)接口的相容和轉(zhuǎn)換,如圖所示。
目前七十六頁\總數(shù)九十一頁\編于五點(diǎn)適配器(4)參與者職責(zé)
a)目標(biāo)(Target):定義客戶使用的與應(yīng)用領(lǐng)域相關(guān)的接口。b)客戶(Client):與具有Target接口的對象合作。c)被匹配者(Adaptee):需要被轉(zhuǎn)換匹配的一個(gè)已存在接口。d)適配器(Adapter):將Adaptee的接口與Target接口匹配。目前七十七頁\總數(shù)九十一頁\編于五點(diǎn)適配器(5)協(xié)作:客戶調(diào)用Adapter對象的操作,然后Adapter的操作又調(diào)用Adaptee對象中負(fù)責(zé)處理相應(yīng)請求的操作。目前七十八頁\總數(shù)九十一頁\編于五點(diǎn)責(zé)任鏈(1)目的:通過一條隱式的對象消息鏈傳遞處理請求。該請求沿著這條鏈傳遞,直到有一個(gè)對象處理它為止。其核心是避免將請求的發(fā)送者直接耦合到它的接受者。(2)思路:以GUI系統(tǒng)的聯(lián)機(jī)幫助系統(tǒng)為例。用戶可以在軟件
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 軟件安全設(shè)計(jì)評估報(bào)告范本
- 浙江省麗水市青田縣2023-2024學(xué)年五年級上學(xué)期英語期末試卷
- 石材固色劑知識培訓(xùn)課件
- 塑造五種心態(tài)培訓(xùn)課件4
- 年產(chǎn)6萬噸飼用餅干粉和面包粉項(xiàng)目可行性研究報(bào)告寫作模板-申批備案
- 二零二五年度地產(chǎn)公司建筑工程合同風(fēng)險(xiǎn)評估與防控策略3篇
- 禮儀知識培訓(xùn)課件
- 二零二五年度辦公樓主體結(jié)構(gòu)施工與智慧安防系統(tǒng)合同3篇
- 中國大陸自閉癥干預(yù)方法研究綜述
- Unit 9 Can you come to my party Section A 1a~1c 說課稿 -2024-2025學(xué)年人教版八年級英語上冊
- 口腔頜面外科學(xué) 09顳下頜關(guān)節(jié)疾病
- 臺達(dá)變頻器說明書
- 2023年廣東羅浮山旅游集團(tuán)有限公司招聘筆試題庫及答案解析
- DB11-T1835-2021 給水排水管道工程施工技術(shù)規(guī)程高清最新版
- 解剖篇2-1內(nèi)臟系統(tǒng)消化呼吸生理學(xué)
- 《小學(xué)生錯(cuò)別字原因及對策研究(論文)》
- 北師大版七年級數(shù)學(xué)上冊教案(全冊完整版)教學(xué)設(shè)計(jì)含教學(xué)反思
- 智慧水庫平臺建設(shè)方案
- 系統(tǒng)性紅斑狼瘡-第九版內(nèi)科學(xué)
- 全統(tǒng)定額工程量計(jì)算規(guī)則1994
- 糧食平房倉設(shè)計(jì)規(guī)范
評論
0/150
提交評論