1. 管道和過(guò)濾器風(fēng)格
【數(shù)據(jù)流風(fēng)格撬即,因?yàn)楣艿览锒际菙?shù)據(jù)流】
(1)構(gòu)件:過(guò)濾器。它對(duì)輸入流進(jìn)行處理颂翼、轉(zhuǎn)換晃洒。處理后的結(jié)果在輸出端流出。
【過(guò)濾器之間是相互獨(dú)立的朦乏,無(wú)需進(jìn)行狀態(tài)信息的交互(主要特點(diǎn))球及。每個(gè)過(guò)濾器都有輸入輸出,過(guò)程是:輸入流->進(jìn)行處理->輸出流】
(2)連接件:管道呻疹。位于過(guò)濾器之間桶略,起到信息流的導(dǎo)管作用。
(3)優(yōu)點(diǎn):
a. 使得軟構(gòu)件具有良好的隱蔽性和高內(nèi)聚诲宇、低耦合的特點(diǎn)际歼,系統(tǒng)中已有的過(guò)濾器很容易用于新的待設(shè)計(jì)系統(tǒng)。
【隱蔽性:構(gòu)件本身是封裝好的實(shí)體 ? ? ? ? ? ? ?高內(nèi)聚姑蓝、低耦合:因?yàn)闃?gòu)件彼此之間是獨(dú)立的】
b. 允許設(shè)計(jì)者將整個(gè)系統(tǒng)的輸入/輸出行為看成是多個(gè)過(guò)濾器的行為的簡(jiǎn)單合成
【便于劃分功能】
c. 支持軟件重用鹅心。
【只需要控制過(guò)濾器的輸入流,就可以將兩個(gè)過(guò)濾器連接起來(lái)】
d. 具有較強(qiáng)的可維護(hù)性和可擴(kuò)展性纺荧。
【可維護(hù)性:更新和升級(jí)--增加旭愧、修改過(guò)濾器,只需要考慮涉及到的過(guò)濾器宙暇,其他不相關(guān)的不受影響】
【可擴(kuò)展性:添加新的功能输枯,只需要在原有基礎(chǔ)上添加新的端口】
e. 支持并行執(zhí)行。
【構(gòu)件之間相互獨(dú)立占贫,所以可以并行執(zhí)行】
f. 為系統(tǒng)的性能分析提供了方便桃熄。
【吞吐量、死鎖型奥、計(jì)算機(jī)正確性等屬性】
(4)缺點(diǎn):
a. 通常導(dǎo)致進(jìn)程成為批處理的結(jié)構(gòu)瞳收。
【過(guò)濾器是對(duì)輸入的批量轉(zhuǎn)換處理碉京,對(duì)輸入和輸出有相應(yīng)的說(shuō)明限制】
b. 不適合交互應(yīng)用要求高的情況
【過(guò)濾器對(duì)輸入流有著嚴(yán)格的限制】
c. 因?yàn)樵跀?shù)據(jù)傳輸上沒(méi)有通用的標(biāo)準(zhǔn),每個(gè)過(guò)濾器都增加了解析和合成數(shù)據(jù)的工作螟深,這樣就導(dǎo)致了系統(tǒng)性能下降谐宙,并增加了編寫(xiě)過(guò)濾器的復(fù)雜性。
(5)例子:
Unix的Shell程序
Cat?file | grep xyz | sort |uniq>out
系統(tǒng)先在文件中查找含有xyz的行界弧,排序凡蜻,然后去掉相同的行,最后結(jié)果放到out中
2.?面向?qū)ο蟮捏w系結(jié)構(gòu)風(fēng)格
【這是一種調(diào)用/返回風(fēng)格】
(1)構(gòu)件:對(duì)象垢箕,或者說(shuō)是抽象數(shù)據(jù)類(lèi)型的實(shí)例咽瓷。
? ? ? ? 連接件:通過(guò)函數(shù)和過(guò)程的調(diào)用。
(2)優(yōu)點(diǎn):
a. 信息隱藏保證了對(duì)象行為的可靠性舰讹。
【用戶(hù)只能通過(guò)函數(shù)調(diào)用來(lái)影響一個(gè)對(duì)象茅姜,避免了訪(fǎng)問(wèn)的隨意性】
b. 受封裝的獨(dú)立運(yùn)行對(duì)象把數(shù)據(jù)和操作捆綁在一起,提高了對(duì)象作為一種模塊的內(nèi)聚力月匣,使系統(tǒng)分解成相互作用又相對(duì)獨(dú)立的對(duì)象集合钻洒。
c. 對(duì)象方法的調(diào)用將操作請(qǐng)求和實(shí)現(xiàn)細(xì)節(jié)實(shí)現(xiàn)分離,使得可能在不影響使用者的情況下改變操作的實(shí)現(xiàn)锄开,為系統(tǒng)的維護(hù)升級(jí)提供了便利的條件素标。
d. 對(duì)象可以是多線(xiàn)程的,也可以是單線(xiàn)程的
【對(duì)象之間通過(guò)函數(shù)和過(guò)程的調(diào)用相互影響】
(3)缺點(diǎn):
a. 為了使一個(gè)對(duì)象和另一個(gè)對(duì)象通過(guò)過(guò)程調(diào)用等進(jìn)行交互萍悴,必須知道對(duì)象的標(biāo)識(shí)头遭。
【如果一個(gè)對(duì)象標(biāo)識(shí)改了,所有地方都要改】
b. 不同對(duì)象的操作關(guān)聯(lián)性弱癣诱。
【如果兩個(gè)對(duì)象同時(shí)訪(fǎng)問(wèn)另一個(gè)對(duì)象计维,彼此之間可能會(huì)互相影響】
c. 采用面向?qū)ο螅纸獬龅氖切×6鹊幕绢?lèi)或?qū)ο笏河琛南到y(tǒng)總體結(jié)構(gòu)到構(gòu)件的設(shè)計(jì)鲫惶,缺乏有效的描述和設(shè)計(jì)方法。
【就是一開(kāi)始做體系結(jié)構(gòu)設(shè)計(jì)实抡,分解出的構(gòu)件很難做到對(duì)象這么精準(zhǔn)】
3. 基于事件的風(fēng)格
【這是一種獨(dú)立構(gòu)件風(fēng)格欠母,構(gòu)件之間彼此都不知道】
(1)構(gòu)件:一些模塊,模塊既可以是一些過(guò)程吆寨,又可以是一些事件的集合赏淌。
(2)構(gòu)件不直接調(diào)用一個(gè)過(guò)程,而是觸發(fā)或廣播一個(gè)或多個(gè)事件啄清。系統(tǒng)中的其它構(gòu)件中的過(guò)程在一個(gè)或多個(gè)事件中注冊(cè)六水,當(dāng)一個(gè)事件被觸發(fā),系統(tǒng)自動(dòng)調(diào)用在這個(gè)事件中注冊(cè)的所有過(guò)程。
【構(gòu)件觸發(fā)或者廣播事件->調(diào)用在這個(gè)事件中注冊(cè)的所有過(guò)程(包括一些構(gòu)件)】
(3)過(guò)程可以用通用的方式調(diào)用缩擂,也可以在系統(tǒng)事件中注冊(cè)一些過(guò)程,當(dāng)發(fā)生這些事件時(shí)添寺,過(guò)程被調(diào)用胯盯。
(4)特點(diǎn):?這種風(fēng)格的主要特點(diǎn)是事件的觸發(fā)者并不知道哪些構(gòu)件會(huì)被這些事件影響。這樣不能假定構(gòu)件的處理順序计露,甚至不知道哪些過(guò)程會(huì)被調(diào)用博脑。
【這里說(shuō)的是隱式調(diào)用】
(5)優(yōu)點(diǎn):
a. 為軟件重用提供了強(qiáng)大的支持。當(dāng)需要將一個(gè)構(gòu)件加入現(xiàn)存系統(tǒng)中時(shí)票罐,只需將它注冊(cè)到系統(tǒng)的事件中叉趣。
b. 為改進(jìn)系統(tǒng)帶來(lái)了方便。當(dāng)用一個(gè)構(gòu)件代替另一個(gè)構(gòu)件時(shí)该押,不會(huì)影響到其它構(gòu)件的接口疗杉。
【構(gòu)件之間相互獨(dú)立】
c. 事件廣播者不必知道哪些部件將會(huì)被調(diào)用,部件之間的關(guān)系將弱化蚕礼。
【降低了構(gòu)件之間的耦合性】
(6)缺點(diǎn):
a. 構(gòu)件放棄了對(duì)系統(tǒng)計(jì)算的控制烟具。
【構(gòu)件只知道自己需要調(diào)用的事件,不知道涉及的其他構(gòu)件和它們的順序】
b. 數(shù)據(jù)交換的問(wèn)題奠蹬。有時(shí)數(shù)據(jù)可被一個(gè)事件傳遞朝聋,但另一些情況下,基于事件的系統(tǒng)必須依靠一個(gè)共享的倉(cāng)庫(kù)進(jìn)行交互囤躁。
c. 很難對(duì)系統(tǒng)正確性進(jìn)行推理冀痕。
【Debug有問(wèn)題】
(7)例子:
在某系統(tǒng)中,編輯器和變量監(jiān)視器可以登記相應(yīng)Debugger的斷點(diǎn)事件狸演。當(dāng)Debugger在斷點(diǎn)處停下來(lái)時(shí)言蛇,它聲明該事件,由系統(tǒng)自動(dòng)調(diào)用處理程序宵距。
【Debugger本身只聲明事件猜极,并不關(guān)心哪些過(guò)程會(huì)啟動(dòng),也不關(guān)心這些過(guò)程做什么處理消玄「】
4. 分層的體系結(jié)構(gòu)風(fēng)格
【這是一種調(diào)用/返回風(fēng)格】
(1)連接件:通過(guò)決定層間如何交互的協(xié)議來(lái)定義。
? ? ? ? 拓?fù)浼s束:包括對(duì)相鄰層間交互的約束翩瓜。
(2)分層風(fēng)格有助于將任務(wù)分解成多個(gè)子任務(wù)組受扳,其中每個(gè)子任務(wù)組處于某個(gè)特定的抽象層次上。
(3)層次系統(tǒng)組織成一個(gè)層次結(jié)構(gòu)兔跌,每一層為上層服務(wù)勘高,并作為下層客戶(hù)。最上層只調(diào)用下層提供的函數(shù)功能,最底層只負(fù)責(zé)為直接相鄰的上層提供服務(wù)华望。
(4)在一些層次系統(tǒng)中蕊蝗,除了一些精心挑選的輸出函數(shù)外,內(nèi)部的層只對(duì)相鄰的層可見(jiàn)赖舟。
【由于每一層最多只影響兩層蓬戚,同時(shí)只要給相鄰層提供相同的接口,允許每層用不同的方法實(shí)現(xiàn)宾抓,這為軟件重用提供了強(qiáng)大的支持子漩。】
(5)這種風(fēng)格支持基于可增加抽象層的設(shè)計(jì)石洗。允許將一個(gè)復(fù)雜問(wèn)題分解成一個(gè)增量步驟序列的實(shí)現(xiàn)幢泼。
【就是對(duì)問(wèn)題可以橫向分解和縱向分解結(jié)合】
(6)優(yōu)點(diǎn):
a. 支持基于抽象程度遞增的系統(tǒng)設(shè)計(jì)
【就是可以由簡(jiǎn)單到復(fù)雜】
b. 支持功能增強(qiáng)
【因?yàn)槊恳粚踊局挥绊懴噜弮蓪樱詫?duì)功能的修改最多影響相鄰兩層】
c. 支持重用讲衫。
【層與層之間通過(guò)服務(wù)接口進(jìn)行交互缕棵,所以只要接口不變,層就可以重用】
(7)缺點(diǎn):
a. 并不是每個(gè)系統(tǒng)都可以很容易地劃分為分層的模式涉兽,有時(shí)候?yàn)榱诵阅芸紤]挥吵,要把一些綜合起來(lái)。
b. 效率低下花椭。
【上面的層過(guò)分依賴(lài)下面的層提供服務(wù)忽匈,相關(guān)數(shù)據(jù)傳達(dá)的時(shí)間長(zhǎng)】
c. 缺少公認(rèn)合適的、正確的層次抽象方法矿辽。
【層次太少丹允,分層不能完全發(fā)揮這種風(fēng)格的可重用性、可更改性和可移植性上的潛力袋倔。層次太少雕蔽,會(huì)引入不必要的復(fù)雜性和層間隔離冗余以及層間傳輸?shù)拈_(kāi)銷(xiāo)”瞿龋】
5. 倉(cāng)庫(kù)風(fēng)格
(1)構(gòu)件:中央數(shù)據(jù)結(jié)構(gòu)說(shuō)明當(dāng)前狀態(tài)批狐,獨(dú)立構(gòu)件在中央數(shù)據(jù)存貯上執(zhí)行。
(2)控制原則的選取產(chǎn)生兩個(gè)主要的子類(lèi)前塔。
? ? ? ? 若輸入流中某類(lèi)時(shí)間觸發(fā)進(jìn)程執(zhí)行的選擇嚣艇,則倉(cāng)庫(kù)是一傳統(tǒng)型數(shù)據(jù)庫(kù);
? ? ? ? 若中央數(shù)據(jù)結(jié)構(gòu)的當(dāng)前狀態(tài)觸發(fā)進(jìn)程執(zhí)行的選擇华弓,則倉(cāng)庫(kù)是一黑板系統(tǒng)食零。
6. 黑板系統(tǒng)
【是一種倉(cāng)庫(kù)風(fēng)格】
(1)組成元素:
知識(shí)源:包含獨(dú)立的、與應(yīng)用程序相關(guān)的知識(shí)寂屏。
黑板數(shù)據(jù):是按照與應(yīng)用程序相關(guān)的層次來(lái)組織的解決問(wèn)題的數(shù)據(jù)贰谣。知識(shí)源通過(guò)不斷的改變黑板數(shù)據(jù)來(lái)解決問(wèn)題娜搂。
黑板:保存著系統(tǒng)的輸入、問(wèn)題求解各個(gè)階段的中間結(jié)果和反映整個(gè)問(wèn)題的求解狀態(tài)吱抚。
【知識(shí)之間不直接通信百宇,它們之間的交互通過(guò)黑板完成】
控制:完全由黑板的狀態(tài)驅(qū)動(dòng),黑板狀態(tài)的改變決定使用的特定知識(shí)秘豹。
(2)應(yīng)用:傳統(tǒng)應(yīng)用是信號(hào)處理領(lǐng)域携御,如語(yǔ)音和模式識(shí)別,另一應(yīng)用是松耦合代理數(shù)據(jù)共享存取?憋肖。
7. C2(Component and Connector)風(fēng)格
(1)C2風(fēng)格是一種基于構(gòu)件和消息的體系結(jié)構(gòu)風(fēng)格因痛,用于構(gòu)件靈活的婚苹、可擴(kuò)展的軟件系統(tǒng)岸更。C2對(duì)具有圖形用戶(hù)界面的應(yīng)用有良好的支持。
(2)C2風(fēng)格的體系結(jié)構(gòu)是一個(gè)層次網(wǎng)絡(luò)膊升,這個(gè)網(wǎng)絡(luò)由相互協(xié)作的構(gòu)件和負(fù)責(zé)將它們鏈接在一起的連接件按照一套風(fēng)格規(guī)則組成怎炊。
【也可以理解為通過(guò)連接件綁定在一起的按照一組規(guī)則運(yùn)作的并行構(gòu)件網(wǎng)絡(luò)±耄】
(3)系統(tǒng)中的構(gòu)件和連接件都有一個(gè)頂部和一個(gè)底部评肆。
(4)構(gòu)件與構(gòu)件之間的直接連接是不允許的,連接件和連接件之間可以直接連接非区。
(5)中心原則:有限可視原則瓜挽,或者說(shuō)是與下層獨(dú)立的原則。
【某一構(gòu)件只能感知層次高于自己的構(gòu)件所提供的服務(wù)征绸,而不能感知到層次比自己更低的構(gòu)件的服務(wù)】
(6)通信規(guī)則:所有構(gòu)件之間的通訊是通過(guò)以連接件為中介的異步消息交換機(jī)制來(lái)實(shí)現(xiàn)的久橙;消息是構(gòu)件之間唯一通信途徑。
【以連接件為中介:構(gòu)件之間不能直接通訊】
(7)特點(diǎn):
a. 基于構(gòu)件的風(fēng)格管怠。
b. 可擴(kuò)展性淆衷。
c. 適應(yīng)性
【可同時(shí)有多個(gè)用戶(hù)進(jìn)行交互】