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

下載本文檔

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

文檔簡(jiǎn)介

軟件體系結(jié)構(gòu)風(fēng)格與設(shè)計(jì)模式前言1、軟件體系結(jié)構(gòu)是軟件工程的一個(gè)重要研究?jī)?nèi)容2、軟件體系結(jié)構(gòu)的設(shè)計(jì)是軟件開(kāi)發(fā)中的一個(gè)關(guān)鍵環(huán)節(jié),是軟件質(zhì)量的重要保證。3、軟件體系結(jié)構(gòu)已經(jīng)成為一個(gè)重要的研究方向和獨(dú)立的學(xué)科分支。4、軟件體系結(jié)構(gòu)對(duì)軟件的總體結(jié)構(gòu)進(jìn)行清晰的描述和分析、并用它指導(dǎo)軟件的后續(xù)開(kāi)發(fā)。5、模式的本質(zhì):可解決一類(lèi)問(wèn)題并能重復(fù)使用的解決方案基本概念軟件設(shè)計(jì)模式:廣義定義:可解決一類(lèi)軟件問(wèn)題并能重復(fù)使用的軟件設(shè)計(jì)方案狹義定義:設(shè)計(jì)模式是對(duì)被用來(lái)在特定場(chǎng)景下解決一般設(shè)計(jì)問(wèn)題的類(lèi)和相互通信的對(duì)象的描述。是在類(lèi)和對(duì)象的層次描述的可重復(fù)使用的軟件設(shè)計(jì)問(wèn)題解決方案?;靖拍钴浖w系結(jié)構(gòu)風(fēng)格:是在構(gòu)件和連接子的層次所描述的可重復(fù)使用的軟件設(shè)計(jì)問(wèn)題解決方案?;靖拍疃叩墓残院蛥^(qū)別:區(qū)別:1、設(shè)計(jì)模式是在類(lèi)和對(duì)象的層次描述問(wèn)題,粒度較?。?、體系結(jié)構(gòu)風(fēng)格是在構(gòu)件和連接子的層次描述問(wèn)題,粒度較大。體系結(jié)構(gòu)風(fēng)格是廣義上的設(shè)計(jì)模式。共性:都是可重復(fù)使用的軟件設(shè)計(jì)問(wèn)題解決方案軟件體系結(jié)構(gòu)描述語(yǔ)言軟件體系結(jié)構(gòu)描述語(yǔ)言ArchitecturalDescriptionLanguage,簡(jiǎn)稱(chēng)ADL是用來(lái)描述軟件密集型系統(tǒng)的總體結(jié)構(gòu)的語(yǔ)言,說(shuō)明系統(tǒng)眾多部件之間的結(jié)構(gòu)關(guān)系。代表性的體系結(jié)構(gòu)描述語(yǔ)言WrightRapideDarwinUniconACMEABC/ADLXYZ/ADLXADL大部分結(jié)構(gòu)描述語(yǔ)言都有構(gòu)件、連接子、配置等概念軟件體系結(jié)構(gòu)描述語(yǔ)言WrightADL構(gòu)件(Component)連接子(Connector)端口(Ports)構(gòu)件規(guī)范(Component-spec)計(jì)算(Computation)配置(Configuration)角色(Roles)粘連(Glue)實(shí)例(Instances)聯(lián)接(Attachments)軟件體系結(jié)構(gòu)描述語(yǔ)言-WrightADL過(guò)程調(diào)用實(shí)例:一個(gè)Caller類(lèi)型的構(gòu)件c通過(guò)D-C-connector類(lèi)型的連接子dc調(diào)用Definer類(lèi)型的構(gòu)件d

c

調(diào)用

d軟件體系結(jié)構(gòu)描述語(yǔ)言調(diào)用實(shí)例的Wright體系結(jié)構(gòu)描述軟件體系結(jié)構(gòu)描述語(yǔ)言GADL的元模型圖形化的體系結(jié)構(gòu)描述語(yǔ)言GADL軟件體系結(jié)構(gòu)描述語(yǔ)言圖形化的體系結(jié)構(gòu)描述語(yǔ)言GADL調(diào)用實(shí)例的GADL體系結(jié)構(gòu)描述—構(gòu)件圖構(gòu)件連接子端口角色軟件體系結(jié)構(gòu)描述語(yǔ)言調(diào)用實(shí)例的GADL體系結(jié)構(gòu)描述—類(lèi)圖軟件體系結(jié)構(gòu)描述語(yǔ)言一個(gè)圖形化的體系結(jié)構(gòu)描述語(yǔ)言GADL調(diào)用實(shí)例的GADL體系結(jié)構(gòu)描述—協(xié)議類(lèi)圖和順序圖軟件體系結(jié)構(gòu)描述語(yǔ)言GADL語(yǔ)言用構(gòu)件圖、類(lèi)圖、順序圖等方式描述系統(tǒng)的軟件體系結(jié)構(gòu),對(duì)行為的描述GADL用順序圖,而Wright用進(jìn)行代數(shù)CSP。軟件體系結(jié)構(gòu)風(fēng)格在構(gòu)件和連接子的層次上描述的可重復(fù)使用的軟件設(shè)計(jì)問(wèn)題解決方案。管道/過(guò)濾器風(fēng)格層次風(fēng)格客戶(hù)/服務(wù)器風(fēng)格核心特征、應(yīng)用場(chǎng)景、注意的問(wèn)題軟件體系結(jié)構(gòu)風(fēng)格-管道/過(guò)濾器風(fēng)格實(shí)例剖析:統(tǒng)計(jì)a.txt中單詞的個(gè)數(shù)并打印出來(lái):

shell命令:“cata.txt|wc-w|lpr”

1、cat命令輸出a.txt的內(nèi)容2、通過(guò)管道傳給命令wc,統(tǒng)計(jì)輸入流中單詞的個(gè)數(shù)并輸出3、輸出的單詞數(shù)通過(guò)管道傳給命令lpr,lpr將其打印出來(lái)

軟件體系結(jié)構(gòu)風(fēng)格-管道/過(guò)濾器風(fēng)格實(shí)例剖析:

shell命令:“cata.txt|wc-w|lpr”

軟件體系結(jié)構(gòu)風(fēng)格-管道/過(guò)濾器風(fēng)格實(shí)例剖析:

shell命令:“cata.txt|wc-w|lpr”

WriteData協(xié)議類(lèi)圖和順序圖軟件體系結(jié)構(gòu)風(fēng)格-管道/過(guò)濾器風(fēng)格實(shí)例剖析:

shell命令:“cata.txt|wc-w|lpr”

ReadData協(xié)議類(lèi)圖和順序圖軟件體系結(jié)構(gòu)風(fēng)格-管道/過(guò)濾器風(fēng)格實(shí)例剖析:打印a.txt中soft的個(gè)數(shù)

“cata.txt|grep-osoft|wc-w|lpr”構(gòu)件圖軟件體系結(jié)構(gòu)風(fēng)格-管道/過(guò)濾器風(fēng)格特征:系統(tǒng)中構(gòu)件之間通過(guò)數(shù)據(jù)流松散耦合。也就是說(shuō),構(gòu)件之間的依賴(lài)僅僅是數(shù)據(jù)流,而不是通常的接口函數(shù)調(diào)用或消息傳遞。其他典型應(yīng)用:編譯器、信號(hào)處理等。其他說(shuō)明:本模式在實(shí)現(xiàn)上可以有許多不同的變化,如主動(dòng)與被動(dòng)、多出口管道等。軟件體系結(jié)構(gòu)風(fēng)格-層次風(fēng)格實(shí)例剖析:數(shù)據(jù)庫(kù)系統(tǒng)用戶(hù)接口(查詢(xún)、創(chuàng)建等)數(shù)據(jù)庫(kù)管理數(shù)據(jù)庫(kù)文件(文件管理功能)文件管理外部設(shè)備(設(shè)備管理功能)設(shè)備管理軟件體系結(jié)構(gòu)風(fēng)格-層次風(fēng)格實(shí)例剖析:數(shù)據(jù)庫(kù)系統(tǒng)數(shù)據(jù)庫(kù)服務(wù)端口db軟件體系結(jié)構(gòu)風(fēng)格-層次風(fēng)格特征:從向外提供服務(wù)的構(gòu)件出發(fā),沿著連接關(guān)系遞次搜索各構(gòu)件和連接子,如果形成的拓?fù)浣Y(jié)構(gòu)是一個(gè)有向無(wú)圈圖(典型情況下是一個(gè)線性結(jié)構(gòu)),那么這個(gè)系統(tǒng)的體系結(jié)構(gòu)風(fēng)格就是層次式的。這種設(shè)計(jì)風(fēng)格便于將復(fù)雜的系統(tǒng)進(jìn)行分解;同時(shí)也便于構(gòu)件替換:只要保持接口一致,就可以將某一層的軟件替換掉,而不會(huì)影響到系統(tǒng)的其他部分。軟件體系結(jié)構(gòu)風(fēng)格-層次風(fēng)格其他典型應(yīng)用:開(kāi)放系統(tǒng)互聯(lián)(OSI)七層網(wǎng)絡(luò)模型、WindowsNT操作系統(tǒng)的內(nèi)核結(jié)構(gòu)。軟件體系結(jié)構(gòu)風(fēng)格-層次風(fēng)格軟件體系結(jié)構(gòu)風(fēng)格-層次風(fēng)格其他說(shuō)明:優(yōu)點(diǎn)是結(jié)構(gòu)清晰、可替換性好、便于控制復(fù)雜性;但也有它的缺點(diǎn),如效率低:分層結(jié)構(gòu)中高層的數(shù)據(jù)要經(jīng)過(guò)層層傳遞和轉(zhuǎn)發(fā),從而降低系統(tǒng)效率。軟件體系結(jié)構(gòu)風(fēng)格-客戶(hù)/服務(wù)器風(fēng)格實(shí)例剖析:FTP系統(tǒng)軟件體系結(jié)構(gòu)風(fēng)格-客戶(hù)/服務(wù)器風(fēng)格特征:從向外提供服務(wù)的構(gòu)件出發(fā),沿著連接關(guān)系遞次搜索各構(gòu)件和連接子,如果形成的拓?fù)浣Y(jié)構(gòu)是一棵倒置的樹(shù),那么這個(gè)系統(tǒng)的體系結(jié)構(gòu)就是客戶(hù)/服務(wù)器風(fēng)格的。這種風(fēng)格使得服務(wù)功能的實(shí)現(xiàn)很集中,便于系統(tǒng)實(shí)現(xiàn),因而得到廣泛使用。軟件體系結(jié)構(gòu)風(fēng)格-客戶(hù)/服務(wù)器風(fēng)格其他典型應(yīng)用:電子郵件系統(tǒng)、WWW系統(tǒng)、TELNET系統(tǒng)、CVS版本控制系統(tǒng)等軟件體系結(jié)構(gòu)風(fēng)格-客戶(hù)/服務(wù)器風(fēng)格數(shù)據(jù)庫(kù)服務(wù)器可以向多個(gè)瀏覽器實(shí)例提供服務(wù)、還可以向CVS系統(tǒng)提供服務(wù)。軟件體系結(jié)構(gòu)風(fēng)格-客戶(hù)/服務(wù)器風(fēng)格其他說(shuō)明:在客戶(hù)/服務(wù)器風(fēng)格的系統(tǒng)中,服務(wù)器是資源和計(jì)算的集中地,因此容易成為存儲(chǔ)和計(jì)算瓶頸,實(shí)際應(yīng)用中為了提高服務(wù)器的性能,可能要采用集群處理等辦法。同時(shí),這個(gè)特點(diǎn)也使得這類(lèi)系統(tǒng)容易遭受拒絕服務(wù)(DenyOfService)攻擊,因此在設(shè)計(jì)和應(yīng)用中要作針對(duì)性考慮。此外,在這種風(fēng)格的系統(tǒng)中,服務(wù)器中往往要存儲(chǔ)更多客戶(hù)的狀態(tài)信息,因此大量使用并發(fā)執(zhí)行技術(shù),如多進(jìn)程、多線程等,這也就涉及到進(jìn)程、線程的動(dòng)態(tài)創(chuàng)建、調(diào)度、刪除等問(wèn)題。這些問(wèn)題處理得好壞直接影響到服務(wù)器的性能。設(shè)計(jì)模式文獻(xiàn)[7-2]中描述了23個(gè)設(shè)計(jì)模式,并將它們分為三種類(lèi)型:創(chuàng)建型設(shè)計(jì)模式、結(jié)構(gòu)型設(shè)計(jì)模式和行為型設(shè)計(jì)模式。設(shè)計(jì)模式FactoryMethod(工廠方法)AbstractFactory(抽象工廠)Singleton(單件)Composite(組合)Proxy(代理)Iterator(迭代器)Observer(觀察者)動(dòng)機(jī)和實(shí)例、應(yīng)用場(chǎng)合、結(jié)構(gòu)、核心思想設(shè)計(jì)模式-FactoryMethod動(dòng)機(jī)與實(shí)例:“龍珠”游戲魔力管道:彈球(pop)制造球(Enchant)球設(shè)計(jì)模式-FactoryMethod動(dòng)機(jī)與實(shí)例:“龍珠”游戲-設(shè)計(jì)1球有多種,如皮球、鋼球Ball抽象父類(lèi)Ball無(wú)法被實(shí)例化?設(shè)計(jì)模式-FactoryMethod動(dòng)機(jī)與實(shí)例:“龍珠”游戲-設(shè)計(jì)2newBall動(dòng)作包裝成虛函數(shù)MakeBallFactoryMethod在子類(lèi)(描述各種魔力管道)中重新定義該虛函數(shù)設(shè)計(jì)模式-FactoryMethod適用場(chǎng)合:有一些實(shí)體(各種魔力管道),它們的結(jié)構(gòu)和行為是相似的,且都包含一些相似的更小實(shí)體(各類(lèi)球),但一個(gè)大實(shí)體內(nèi)部的這些小實(shí)體都是同一類(lèi)的(一種魔力管道內(nèi)只有一種球)。此時(shí),如果各類(lèi)小實(shí)體的描述構(gòu)成一個(gè)類(lèi)層次,那么可使用FactoryMethod模式,將各類(lèi)大實(shí)體也描述為一個(gè)類(lèi)層次。設(shè)計(jì)模式-FactoryMethod結(jié)構(gòu):設(shè)計(jì)模式-FactoryMethod核心思想歸納:在父類(lèi)中,將創(chuàng)建對(duì)象的操作包裝為一個(gè)虛函數(shù),在描述公共行為的過(guò)程中調(diào)用該函數(shù);在子類(lèi)中重定義該虛函數(shù)來(lái)定制創(chuàng)建的對(duì)象,從而間接定制公共行為。利用虛函數(shù)的多態(tài)機(jī)制,F(xiàn)actoryMethod模式使得父類(lèi)可集中描述公共行為,而將特別行為(不同對(duì)象的創(chuàng)建)抽放于子類(lèi)。設(shè)計(jì)模式-AbstractFactory動(dòng)機(jī)與實(shí)例:魔力管道。在前面的設(shè)計(jì)中,三個(gè)MakeBallFactoryMethod工廠方法散放在三個(gè)MagicPipe類(lèi)中。為了降低復(fù)雜性,可以把所有的創(chuàng)建動(dòng)作拆分出來(lái)單獨(dú)考慮。

即:創(chuàng)建球的動(dòng)作單獨(dú)形成一個(gè)工廠類(lèi),專(zhuān)門(mén)創(chuàng)建對(duì)象。設(shè)計(jì)模式-AbstractFactory動(dòng)機(jī)與實(shí)例:設(shè)計(jì)3設(shè)計(jì)模式-AbstractFactory動(dòng)機(jī)與實(shí)例:設(shè)計(jì)4不僅有球、還有盒子等小實(shí)體,抽象工廠類(lèi)專(zhuān)門(mén)創(chuàng)建各種小實(shí)體設(shè)計(jì)模式-AbstractFactory動(dòng)機(jī)與實(shí)例:設(shè)計(jì)5混合管道和小實(shí)體設(shè)計(jì)模式-AbstractFactory適用場(chǎng)合:當(dāng)需要?jiǎng)?chuàng)建一組多種風(fēng)格的小實(shí)體、且具體創(chuàng)建方式又要靈活可調(diào)整時(shí),可使用AbstractFactory模式,將公共的創(chuàng)建行為描述為一個(gè)抽象類(lèi),而將具體的創(chuàng)建方式用該抽象類(lèi)的子類(lèi)來(lái)描述。設(shè)計(jì)模式-AbstractFactory結(jié)構(gòu):設(shè)計(jì)模式-AbstractFactory核心思想歸納:為了提供靈活性,將需要?jiǎng)?chuàng)建的同一風(fēng)格的一組小實(shí)體的一般特征提取出來(lái),用一組抽象產(chǎn)品類(lèi)來(lái)描述,同時(shí)將創(chuàng)建行為封裝為一個(gè)抽象工廠類(lèi),提供通用的創(chuàng)建接口,而將各種具體的產(chǎn)品和具體的創(chuàng)建行為用抽象產(chǎn)品類(lèi)和抽象工廠類(lèi)的子類(lèi)來(lái)描述。從而使得BigEntity和具體的產(chǎn)品特性和具體的創(chuàng)建行為隔離開(kāi)來(lái),既降低了耦合度,也使得靈活調(diào)整創(chuàng)建行為成為可能。設(shè)計(jì)模式-Singleton動(dòng)機(jī)與實(shí)例:日志功能,在一個(gè)應(yīng)用程序內(nèi)部一般只需要一個(gè)日志實(shí)例即可。實(shí)現(xiàn)方案1公有的構(gòu)造函數(shù)設(shè)計(jì)模式-Singleton實(shí)現(xiàn)方案1全局變量設(shè)計(jì)模式-Singleton實(shí)現(xiàn)方案1需要日志的地方直接使用變量g_log和相關(guān)接口函數(shù)設(shè)計(jì)模式-Singleton實(shí)現(xiàn)方案1:兩個(gè)缺陷一般情況下(如果只有一個(gè)日志文件)只需要一個(gè)Log實(shí)例即可,但上述做法不能保證Log的實(shí)例只有一個(gè),當(dāng)多個(gè)實(shí)例設(shè)置相同的日志文件的時(shí)候,還可能引起沖突;這種做法使得g_log無(wú)論用到與否都要被創(chuàng)建。設(shè)計(jì)模式-Singleton實(shí)現(xiàn)方案2:使用Singleton模式私有靜態(tài)成員變量,代替全局變量,指向log唯一實(shí)例構(gòu)造函數(shù)變?yōu)閜rotected不可能在類(lèi)外部創(chuàng)建實(shí)例靜態(tài)私有函數(shù)代替全局變量,獲取實(shí)例指針設(shè)計(jì)模式-Singleton實(shí)現(xiàn)方案2:使用Singleton模式#include“l(fā)og.h”Log*log::theOnlyInstance=0;Log*Log::getInstance(){If(!theOnlyInstance)theOnlyInstance=newLog();ReturntheOnlyInstance;};…初始化為0靜態(tài)成員函數(shù)getInstance返回theOnlyInstance的值設(shè)計(jì)模式-Singleton實(shí)現(xiàn)方案2:使用Singleton模式#include“l(fā)og.h”Voidmain(){Log*plog=Log::getInstance();…};…需要日志時(shí),調(diào)用靜態(tài)成員函數(shù)getInstance值設(shè)計(jì)模式-Singleton適用場(chǎng)合:當(dāng)需要確保一個(gè)類(lèi)最多只有一個(gè)實(shí)例時(shí),使用本模式。設(shè)計(jì)模式-Singleton結(jié)構(gòu):設(shè)需要保證只有一個(gè)實(shí)例的類(lèi)為Singleton,則類(lèi)Singleton的定義為:設(shè)計(jì)模式-Singleton結(jié)構(gòu):類(lèi)Singleton的實(shí)現(xiàn)為:設(shè)計(jì)模式-Singleton核心思想歸納:通過(guò)將一個(gè)類(lèi)的構(gòu)造函數(shù)設(shè)置為protected或private,可有效阻止從外部直接創(chuàng)建該類(lèi)的實(shí)例;同時(shí)設(shè)置一個(gè)靜態(tài)成員函數(shù),以負(fù)責(zé)創(chuàng)建唯一的實(shí)例并向外提供訪問(wèn)接口。設(shè)計(jì)模式-Composite動(dòng)機(jī)與實(shí)例:幻燈片制作軟件。一張幻燈片上可以有各種圖元對(duì)象:文本框、圖形、圖像、影片、聲音等等。圖元具有“遞歸組合”特性。設(shè)計(jì)模式-Composite適用場(chǎng)合:當(dāng)需要描述的對(duì)象具有“遞歸組合”特征、且希望用戶(hù)忽略基本對(duì)象與組合對(duì)象的區(qū)別時(shí),適用本模式。結(jié)構(gòu):設(shè)計(jì)模式-Composite核心思想歸納:為基本對(duì)象和組合對(duì)象提供一個(gè)公共的抽象父類(lèi),以表示所有對(duì)象,并建立起從該抽象父類(lèi)到組合對(duì)象類(lèi)的聚集關(guān)聯(lián),從而間接建立起“遞歸組合”特性。設(shè)計(jì)模式-Proxy動(dòng)機(jī)與實(shí)例:網(wǎng)絡(luò)中間件。在這類(lèi)程序中,實(shí)際工作的對(duì)象可能運(yùn)行在遠(yuǎn)程的主機(jī)上,與客戶(hù)端應(yīng)用分別處于不同的地址空間。為了編程方便,在其中大量地使用了Proxy模式。建立一個(gè)Proxy對(duì)象:它與Server對(duì)象的接口是一樣的,而且與Client對(duì)象位于同一臺(tái)機(jī)器、同一地址空間中,所有發(fā)給它的操作請(qǐng)求最終都轉(zhuǎn)發(fā)Server對(duì)象。給使Client對(duì)象的設(shè)計(jì)開(kāi)發(fā)變得簡(jiǎn)單,就像本地編程一樣,網(wǎng)絡(luò)交互的許多細(xì)節(jié)則集中到Proxy對(duì)象的實(shí)現(xiàn)中。設(shè)計(jì)模式-Proxy適用場(chǎng)合:前面的例子中使用Proxy模式是為了屏蔽網(wǎng)絡(luò)交互細(xì)節(jié)、透明進(jìn)行遠(yuǎn)程訪問(wèn),因此屬于“遠(yuǎn)程代理”;還有一些場(chǎng)合是為了提高性能、降低開(kāi)銷(xiāo),而設(shè)置一個(gè)“虛代理”,如文檔文件中的圖像代理,它只描述圖像的位置、大小等基本信息,具體圖像文件細(xì)節(jié)僅在需要時(shí)再創(chuàng)建一個(gè)真正的圖像對(duì)象來(lái)描述;另外,當(dāng)被訪問(wèn)對(duì)象的內(nèi)部結(jié)構(gòu)很復(fù)雜且需要進(jìn)行智能的分析、決策和協(xié)調(diào)時(shí),可使用“智能代理”來(lái)屏蔽這些智能決策的細(xì)節(jié),如一個(gè)“訂票”代理就是如此:它可根據(jù)多家航空公司的訂票服務(wù),智能選擇一種符合用戶(hù)要求的訂票方案。

設(shè)計(jì)模式-Proxy結(jié)構(gòu)設(shè)計(jì)模式-Proxy核心思想歸納:構(gòu)造一個(gè)具有相同接口的代理對(duì)象,然后將操作請(qǐng)求轉(zhuǎn)發(fā)給真實(shí)對(duì)象,其目的是向客戶(hù)隱藏“轉(zhuǎn)發(fā)過(guò)程”的細(xì)節(jié)(如遠(yuǎn)程網(wǎng)絡(luò)交互、智能決策、選擇性轉(zhuǎn)發(fā)等),提供對(duì)真實(shí)對(duì)象的透明訪問(wèn)。設(shè)計(jì)模式-Iterator動(dòng)機(jī)與實(shí)例:支持遍歷的列表設(shè)計(jì)。設(shè)計(jì)方案1內(nèi)部迭代外部迭代設(shè)計(jì)模式-Iterator動(dòng)機(jī)與實(shí)例:支持遍歷的列表設(shè)計(jì)。設(shè)計(jì)方案1的問(wèn)題:其一,這種設(shè)計(jì)只能描述一種遍歷方式,如向前遍歷或向后遍歷,但不能同時(shí)描述多種遍歷方式。或許,大家覺(jué)得只需要再向List里面增加一些表示遍歷的接口函數(shù)和表示位置的成員變量即可,但這樣一來(lái)眾多關(guān)系不緊密的功能混放在一個(gè)類(lèi)里,會(huì)使得內(nèi)聚程度變低,容易導(dǎo)致類(lèi)膨脹,同時(shí)也給函數(shù)命名等帶來(lái)不便。其二,這種設(shè)計(jì)不支持在一個(gè)列表上同時(shí)進(jìn)行多個(gè)相同類(lèi)型的遍歷(如都是向后遍歷,只是對(duì)元素的處理方式不同),而這種情況可能出現(xiàn)在并行程序中。設(shè)計(jì)模式-Iterator設(shè)計(jì)方案2:在一個(gè)列表上同時(shí)進(jìn)行多個(gè)相同類(lèi)型的遍歷。使用Iterator模式,將負(fù)責(zé)遍歷的部分功能從List中分離出來(lái),單獨(dú)形成一個(gè)類(lèi)ListIterator設(shè)計(jì)模式-Iterator設(shè)計(jì)方案2:在一個(gè)列表上同時(shí)進(jìn)行多個(gè)相同類(lèi)型的遍歷ClassListIterator{…Private:constList<Item>*list;…}ListIterator增加指向原列表的指針。因此,一個(gè)ListIterator實(shí)例記錄了與列表的一次遍歷相關(guān)的所有信息,通過(guò)定義ListIterator的多個(gè)實(shí)例變量,就可以在一個(gè)列表上同時(shí)進(jìn)行多個(gè)相同類(lèi)型的遍歷。設(shè)計(jì)模式-Iterator設(shè)計(jì)方案3:以多種方式遍歷一個(gè)列表,再定義一個(gè)迭代器類(lèi)型設(shè)計(jì)模式-Iterator適用場(chǎng)合:當(dāng)需要以多種方式靈活地遍歷一個(gè)聚合對(duì)象中的各個(gè)元素時(shí),適用本模式。結(jié)構(gòu):設(shè)計(jì)模式-Iterator核心思想歸納:通過(guò)將與遍歷有關(guān)的部分從聚合對(duì)象的描述中分離出來(lái)、單獨(dú)成類(lèi),能夠?qū)⒈闅v的狀態(tài)信息用一個(gè)獨(dú)立對(duì)象記錄,從而可有效處理多種遍歷和并發(fā)遍歷。另外,本模式可與FactoryMethod模式配合使用,支持從聚合對(duì)象直接創(chuàng)建相應(yīng)的聚合器。設(shè)計(jì)模式-Observer動(dòng)機(jī)與實(shí)例:Word軟件的“窗口拆分”功能。設(shè)計(jì)模式-Observer動(dòng)機(jī)與實(shí)例:Word軟件的“窗口拆分”功能。設(shè)計(jì)模式-Observer動(dòng)機(jī)與實(shí)例:Word軟件的“窗口拆分”功能。設(shè)計(jì)模式-Observer動(dòng)機(jī)與實(shí)例:Word軟件的“窗口拆分”功能。設(shè)計(jì)模式-Observer適用場(chǎng)合:如果對(duì)象之間存在一對(duì)多的數(shù)據(jù)依賴(lài)關(guān)系、且當(dāng)被依賴(lài)對(duì)象的數(shù)據(jù)改變時(shí)所有依賴(lài)于它的對(duì)象都應(yīng)得到通知并自動(dòng)更新,那么可使用本模式。被依賴(lài)的對(duì)象稱(chēng)為發(fā)布者,負(fù)責(zé)發(fā)布數(shù)據(jù)并通知所有的訂閱者(即依賴(lài)于該發(fā)布者的對(duì)象),以便訂閱者與發(fā)布者的狀態(tài)保持一致。前面的例子中,Document對(duì)象為發(fā)布者,而Window對(duì)象為訂閱者。因此,本模式也稱(chēng)為發(fā)布-訂閱(Publish-Subscribe)模式。訂閱者也可稱(chēng)為觀察者(Observer),它似乎在時(shí)刻觀察發(fā)布者的狀態(tài),并及時(shí)更新自己。設(shè)計(jì)模式-Observer結(jié)構(gòu):設(shè)計(jì)模式-總結(jié)、分類(lèi)總體來(lái)說(shuō)設(shè)計(jì)模式分為三大類(lèi):創(chuàng)建型模式,共五種:工廠方法模式、抽象工廠模式、單例模式、建造者模式、原型模式。結(jié)構(gòu)型模式,共七種:適配器模式、裝飾器模式、代理模式、外觀模式、橋接模式、組合模式、享元模式。行為型模式,共十一種:策略模式、模板方法模式、觀察者模式、迭代子模式、責(zé)任鏈模式、命令模式、備忘錄模式、狀態(tài)模式、訪問(wèn)者模式、中介者模式、解釋

溫馨提示

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

評(píng)論

0/150

提交評(píng)論