1. 管道和過濾器風(fēng)格
【數(shù)據(jù)流風(fēng)格,因為管道里都是數(shù)據(jù)流】
(1)構(gòu)件:過濾器。它對輸入流進行處理、轉(zhuǎn)換。處理后的結(jié)果在輸出端流出。
【過濾器之間是相互獨立的,無需進行狀態(tài)信息的交互(主要特點)。每個過濾器都有輸入輸出,過程是:輸入流->進行處理->輸出流】
(2)連接件:管道。位于過濾器之間,起到信息流的導(dǎo)管作用。
(3)優(yōu)點:
a. 使得軟構(gòu)件具有良好的隱蔽性和高內(nèi)聚、低耦合的特點,系統(tǒng)中已有的過濾器很容易用于新的待設(shè)計系統(tǒng)。
【隱蔽性:構(gòu)件本身是封裝好的實體 ? ? ? ? ? ? ?高內(nèi)聚、低耦合:因為構(gòu)件彼此之間是獨立的】
b. 允許設(shè)計者將整個系統(tǒng)的輸入/輸出行為看成是多個過濾器的行為的簡單合成
【便于劃分功能】
c. 支持軟件重用。
【只需要控制過濾器的輸入流,就可以將兩個過濾器連接起來】
d. 具有較強的可維護性和可擴展性。
【可維護性:更新和升級--增加、修改過濾器,只需要考慮涉及到的過濾器,其他不相關(guān)的不受影響】
【可擴展性:添加新的功能,只需要在原有基礎(chǔ)上添加新的端口】
e. 支持并行執(zhí)行。
【構(gòu)件之間相互獨立,所以可以并行執(zhí)行】
f. 為系統(tǒng)的性能分析提供了方便。
【吞吐量、死鎖、計算機正確性等屬性】
(4)缺點:
a. 通常導(dǎo)致進程成為批處理的結(jié)構(gòu)。
【過濾器是對輸入的批量轉(zhuǎn)換處理,對輸入和輸出有相應(yīng)的說明限制】
b. 不適合交互應(yīng)用要求高的情況
【過濾器對輸入流有著嚴格的限制】
c. 因為在數(shù)據(jù)傳輸上沒有通用的標準,每個過濾器都增加了解析和合成數(shù)據(jù)的工作,這樣就導(dǎo)致了系統(tǒng)性能下降,并增加了編寫過濾器的復(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)件:對象,或者說是抽象數(shù)據(jù)類型的實例。
? ? ? ? 連接件:通過函數(shù)和過程的調(diào)用。
(2)優(yōu)點:
a. 信息隱藏保證了對象行為的可靠性。
【用戶只能通過函數(shù)調(diào)用來影響一個對象,避免了訪問的隨意性】
b. 受封裝的獨立運行對象把數(shù)據(jù)和操作捆綁在一起,提高了對象作為一種模塊的內(nèi)聚力,使系統(tǒng)分解成相互作用又相對獨立的對象集合。
c. 對象方法的調(diào)用將操作請求和實現(xiàn)細節(jié)實現(xiàn)分離,使得可能在不影響使用者的情況下改變操作的實現(xiàn),為系統(tǒng)的維護升級提供了便利的條件。
d. 對象可以是多線程的,也可以是單線程的
【對象之間通過函數(shù)和過程的調(diào)用相互影響】
(3)缺點:
a. 為了使一個對象和另一個對象通過過程調(diào)用等進行交互,必須知道對象的標識。
【如果一個對象標識改了,所有地方都要改】
b. 不同對象的操作關(guān)聯(lián)性弱。
【如果兩個對象同時訪問另一個對象,彼此之間可能會互相影響】
c. 采用面向?qū)ο螅纸獬龅氖切×6鹊幕绢惢驅(qū)ο蟆南到y(tǒng)總體結(jié)構(gòu)到構(gòu)件的設(shè)計,缺乏有效的描述和設(shè)計方法。
【就是一開始做體系結(jié)構(gòu)設(shè)計,分解出的構(gòu)件很難做到對象這么精準】
3. 基于事件的風(fēng)格
【這是一種獨立構(gòu)件風(fēng)格,構(gòu)件之間彼此都不知道】
(1)構(gòu)件:一些模塊,模塊既可以是一些過程,又可以是一些事件的集合。
(2)構(gòu)件不直接調(diào)用一個過程,而是觸發(fā)或廣播一個或多個事件。系統(tǒng)中的其它構(gòu)件中的過程在一個或多個事件中注冊,當(dāng)一個事件被觸發(fā),系統(tǒng)自動調(diào)用在這個事件中注冊的所有過程。
【構(gòu)件觸發(fā)或者廣播事件->調(diào)用在這個事件中注冊的所有過程(包括一些構(gòu)件)】
(3)過程可以用通用的方式調(diào)用,也可以在系統(tǒng)事件中注冊一些過程,當(dāng)發(fā)生這些事件時,過程被調(diào)用。
(4)特點:?這種風(fēng)格的主要特點是事件的觸發(fā)者并不知道哪些構(gòu)件會被這些事件影響。這樣不能假定構(gòu)件的處理順序,甚至不知道哪些過程會被調(diào)用。
【這里說的是隱式調(diào)用】
(5)優(yōu)點:
a. 為軟件重用提供了強大的支持。當(dāng)需要將一個構(gòu)件加入現(xiàn)存系統(tǒng)中時,只需將它注冊到系統(tǒng)的事件中。
b. 為改進系統(tǒng)帶來了方便。當(dāng)用一個構(gòu)件代替另一個構(gòu)件時,不會影響到其它構(gòu)件的接口。
【構(gòu)件之間相互獨立】
c. 事件廣播者不必知道哪些部件將會被調(diào)用,部件之間的關(guān)系將弱化。
【降低了構(gòu)件之間的耦合性】
(6)缺點:
a. 構(gòu)件放棄了對系統(tǒng)計算的控制。
【構(gòu)件只知道自己需要調(diào)用的事件,不知道涉及的其他構(gòu)件和它們的順序】
b. 數(shù)據(jù)交換的問題。有時數(shù)據(jù)可被一個事件傳遞,但另一些情況下,基于事件的系統(tǒng)必須依靠一個共享的倉庫進行交互。
c. 很難對系統(tǒng)正確性進行推理。
【Debug有問題】
(7)例子:
在某系統(tǒng)中,編輯器和變量監(jiān)視器可以登記相應(yīng)Debugger的斷點事件。當(dāng)Debugger在斷點處停下來時,它聲明該事件,由系統(tǒng)自動調(diào)用處理程序。
【Debugger本身只聲明事件,并不關(guān)心哪些過程會啟動,也不關(guān)心這些過程做什么處理。】
4. 分層的體系結(jié)構(gòu)風(fēng)格
【這是一種調(diào)用/返回風(fēng)格】
(1)連接件:通過決定層間如何交互的協(xié)議來定義。
? ? ? ? 拓撲約束:包括對相鄰層間交互的約束。
(2)分層風(fēng)格有助于將任務(wù)分解成多個子任務(wù)組,其中每個子任務(wù)組處于某個特定的抽象層次上。
(3)層次系統(tǒng)組織成一個層次結(jié)構(gòu),每一層為上層服務(wù),并作為下層客戶。最上層只調(diào)用下層提供的函數(shù)功能,最底層只負責(zé)為直接相鄰的上層提供服務(wù)。
(4)在一些層次系統(tǒng)中,除了一些精心挑選的輸出函數(shù)外,內(nèi)部的層只對相鄰的層可見。
【由于每一層最多只影響兩層,同時只要給相鄰層提供相同的接口,允許每層用不同的方法實現(xiàn),這為軟件重用提供了強大的支持。】
(5)這種風(fēng)格支持基于可增加抽象層的設(shè)計。允許將一個復(fù)雜問題分解成一個增量步驟序列的實現(xiàn)。
【就是對問題可以橫向分解和縱向分解結(jié)合】
(6)優(yōu)點:
a. 支持基于抽象程度遞增的系統(tǒng)設(shè)計
【就是可以由簡單到復(fù)雜】
b. 支持功能增強
【因為每一層基本只影響相鄰兩層,所以對功能的修改最多影響相鄰兩層】
c. 支持重用。
【層與層之間通過服務(wù)接口進行交互,所以只要接口不變,層就可以重用】
(7)缺點:
a. 并不是每個系統(tǒng)都可以很容易地劃分為分層的模式,有時候為了性能考慮,要把一些綜合起來。
b. 效率低下。
【上面的層過分依賴下面的層提供服務(wù),相關(guān)數(shù)據(jù)傳達的時間長】
c. 缺少公認合適的、正確的層次抽象方法。
【層次太少,分層不能完全發(fā)揮這種風(fēng)格的可重用性、可更改性和可移植性上的潛力。層次太少,會引入不必要的復(fù)雜性和層間隔離冗余以及層間傳輸?shù)拈_銷。】
5. 倉庫風(fēng)格
(1)構(gòu)件:中央數(shù)據(jù)結(jié)構(gòu)說明當(dāng)前狀態(tài),獨立構(gòu)件在中央數(shù)據(jù)存貯上執(zhí)行。
(2)控制原則的選取產(chǎn)生兩個主要的子類。
? ? ? ? 若輸入流中某類時間觸發(fā)進程執(zhí)行的選擇,則倉庫是一傳統(tǒng)型數(shù)據(jù)庫;
? ? ? ? 若中央數(shù)據(jù)結(jié)構(gòu)的當(dāng)前狀態(tài)觸發(fā)進程執(zhí)行的選擇,則倉庫是一黑板系統(tǒng)。
6. 黑板系統(tǒng)
【是一種倉庫風(fēng)格】
(1)組成元素:
知識源:包含獨立的、與應(yīng)用程序相關(guān)的知識。
黑板數(shù)據(jù):是按照與應(yīng)用程序相關(guān)的層次來組織的解決問題的數(shù)據(jù)。知識源通過不斷的改變黑板數(shù)據(jù)來解決問題。
黑板:保存著系統(tǒng)的輸入、問題求解各個階段的中間結(jié)果和反映整個問題的求解狀態(tài)。
【知識之間不直接通信,它們之間的交互通過黑板完成】
控制:完全由黑板的狀態(tài)驅(qū)動,黑板狀態(tài)的改變決定使用的特定知識。
(2)應(yīng)用:傳統(tǒng)應(yīng)用是信號處理領(lǐng)域,如語音和模式識別,另一應(yīng)用是松耦合代理數(shù)據(jù)共享存取?。
7. C2(Component and Connector)風(fēng)格
(1)C2風(fēng)格是一種基于構(gòu)件和消息的體系結(jié)構(gòu)風(fēng)格,用于構(gòu)件靈活的、可擴展的軟件系統(tǒng)。C2對具有圖形用戶界面的應(yīng)用有良好的支持。
(2)C2風(fēng)格的體系結(jié)構(gòu)是一個層次網(wǎng)絡(luò),這個網(wǎng)絡(luò)由相互協(xié)作的構(gòu)件和負責(zé)將它們鏈接在一起的連接件按照一套風(fēng)格規(guī)則組成。
【也可以理解為通過連接件綁定在一起的按照一組規(guī)則運作的并行構(gòu)件網(wǎng)絡(luò)。】
(3)系統(tǒng)中的構(gòu)件和連接件都有一個頂部和一個底部。
(4)構(gòu)件與構(gòu)件之間的直接連接是不允許的,連接件和連接件之間可以直接連接。
(5)中心原則:有限可視原則,或者說是與下層獨立的原則。
【某一構(gòu)件只能感知層次高于自己的構(gòu)件所提供的服務(wù),而不能感知到層次比自己更低的構(gòu)件的服務(wù)】
(6)通信規(guī)則:所有構(gòu)件之間的通訊是通過以連接件為中介的異步消息交換機制來實現(xiàn)的;消息是構(gòu)件之間唯一通信途徑。
【以連接件為中介:構(gòu)件之間不能直接通訊】
(7)特點:
a. 基于構(gòu)件的風(fēng)格。
b. 可擴展性。
c. 適應(yīng)性
【可同時有多個用戶進行交互】