軟件體系結(jié)構(gòu)風(fēng)格之一

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)行交互】

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市渤弛,隨后出現(xiàn)的幾起案子祝拯,更是在濱河造成了極大的恐慌,老刑警劉巖她肯,帶你破解...
    沈念sama閱讀 216,402評(píng)論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件梢褐,死亡現(xiàn)場(chǎng)離奇詭異鸳劳,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)筐骇,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人何缓,你說(shuō)我怎么就攤上這事随橘±吧” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,483評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵块蚌,是天一觀的道長(zhǎng)闰非。 經(jīng)常有香客問(wèn)我,道長(zhǎng)峭范,這世上最難降的妖魔是什么财松? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,165評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮纱控,結(jié)果婚禮上辆毡,老公的妹妹穿的比我還像新娘。我一直安慰自己甜害,他們只是感情好舶掖,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,176評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著尔店,像睡著了一般眨攘。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上嚣州,一...
    開(kāi)封第一講書(shū)人閱讀 51,146評(píng)論 1 297
  • 那天鲫售,我揣著相機(jī)與錄音,去河邊找鬼该肴。 笑死情竹,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的匀哄。 我是一名探鬼主播秦效,決...
    沈念sama閱讀 40,032評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼拱雏!你這毒婦竟也來(lái)了棉安?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 38,896評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤铸抑,失蹤者是張志新(化名)和其女友劉穎贡耽,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體鹊汛,經(jīng)...
    沈念sama閱讀 45,311評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡蒲赂,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,536評(píng)論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了刁憋。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片滥嘴。...
    茶點(diǎn)故事閱讀 39,696評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖至耻,靈堂內(nèi)的尸體忽然破棺而出若皱,到底是詐尸還是另有隱情镊叁,我是刑警寧澤,帶...
    沈念sama閱讀 35,413評(píng)論 5 343
  • 正文 年R本政府宣布走触,位于F島的核電站晦譬,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏互广。R本人自食惡果不足惜敛腌,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,008評(píng)論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望惫皱。 院中可真熱鬧像樊,春花似錦、人聲如沸旅敷。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)扫皱。三九已至足绅,卻和暖如春捷绑,著一層夾襖步出監(jiān)牢的瞬間韩脑,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,815評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工粹污, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留段多,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,698評(píng)論 2 368
  • 正文 我出身青樓壮吩,卻偏偏與公主長(zhǎng)得像进苍,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子鸭叙,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,592評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容

  • 體系結(jié)構(gòu) = 組件 + 連接件 + 約束 軟件體系結(jié)構(gòu)的核心概念: 構(gòu)/組件 軟件重用 構(gòu)件: 語(yǔ)義完整觉啊、語(yǔ)法正確...
    pianosecret閱讀 2,797評(píng)論 0 0
  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)沈贝,斷路器杠人,智...
    卡卡羅2017閱讀 134,651評(píng)論 18 139
  • 國(guó)家電網(wǎng)公司企業(yè)標(biāo)準(zhǔn)(Q/GDW)- 面向?qū)ο蟮挠秒娦畔?shù)據(jù)交換協(xié)議 - 報(bào)批稿:20170802 前言: 排版 ...
    庭說(shuō)閱讀 10,958評(píng)論 6 13
  • 體系風(fēng)格 如武林門(mén)派各有異長(zhǎng)之處,其所長(zhǎng)即是風(fēng)格體現(xiàn)宋下。對(duì)于軟件體系來(lái)說(shuō)"每一套體系風(fēng)格里裝載著獨(dú)特的結(jié)構(gòu)嗡善、語(yǔ)義特性...
    噠噠luada閱讀 955評(píng)論 0 1
  • 且讓我分擔(dān)你的憂(yōu)愁(一) 20160925 今天早飯后,是君子蘭班的晨誦時(shí)間学歧,本來(lái)早上起床后有20分鐘時(shí)間挺好的罩引,...
    河南麥子的書(shū)寫(xiě)閱讀 705評(píng)論 0 1