在管道-過濾器架構模式中,每個構件都有一組輸入,輸出,構件讀取輸入的數據流,經過內部處理后,產生輸出數據流,該過程主要完成輸入流的變換及增量計算。這里的構件就是過濾器,而連接過濾器的就是管道,這個管道將上一個過濾器處理的結果數據流傳送到下一個過濾器,在進行其他的計算。
簡單來說,管道-過濾器模式結構就像是一條產品加工流水線,原材料在流水線上經過一個個工人的加工,最終生產出產品。這里的工人就是過濾器,將材料進行加工,流水線中的傳送帶就是管道,將一個工人加工過得材料傳送給下一個工人繼續加工。
應用場景1.由一個應用程序所需的處理可以很容易地被分解成一組離散的,獨立的步驟。2.由應用程序執行的處理步驟具有不同的可擴展性要求。
優勢是(1)使得構件具有良好的隱蔽性和高內聚、低耦合的特點;(2)允許設計者將整個系統的輸入/輸出行為看成是多個過濾器的行為的簡單合成;(3)支持軟件重用。重要提供適合在兩個過濾器之間傳送的數據,任何兩個過濾器都可被連接起來(4)系統維護和增強系統性能簡單。新的過濾器可以添加到現有系統中來;舊的可以被改進的過濾器替換掉;(5)允許對一些如吞吐量、死鎖等屬性的分析;(6)支持並行執行。每個過濾器是作為一個單獨的任務完成,因此可與其它任務並行執行;
然后說一些案例:
輸入:源程序
預處理:負責宏展開和去掉注釋等工作。
編譯:進行詞法分析、語法分析、語義分析、代碼優化和代碼產生。
匯編:負責把匯編代碼轉換成機器指令,生成目標文件。
鏈接:負責把多個目標文件、靜態庫和共享庫鏈接成可執行文件/共享庫。
輸出:可執行文件/共享庫。
下面說一下 管道以及過濾器的組成以及優缺點
管道-過濾器的組成
1 過濾器
過濾器按照對流經它的數據操作的不同,可分為3類過濾器:輸入過濾器,處理過濾器和輸出過濾器。下面將對這三類過濾器進行介紹。
(1)輸入過濾器
輸入過濾器處在問題所在的外部世界與軟件系統的邊界處,是系統數據流的源點。它負責接收外界信息並轉化為系統所需的數據流。
(2)處理過濾器
處理過濾器是系統內變換數據流的部件,它有一個入口和一個出口,數據經入口流入,經過處理過濾器內部處理之后從出口流出。
(3)輸出過濾器
從建立完備的,首尾一致的可重用的軟件部件組的角度出發,正如輸入過濾器是系統數據流的起點,那么輸出過濾器是數據流的終點。
過濾器的實現還須滿足以下三條基本原理:
隨后的處理單元從過濾器中拉出輸出數據;
前面的處理單元把新的輸入數據壓入過濾器;
過濾器以循環工作的方式,從流水線中拉出其輸入數據並且將其輸出數據壓入流水線。過濾器按照以上三種情況可分為兩類:主動過濾器和被動過濾器。滿足前兩種情況的過濾器稱為被動過濾器,滿足最后一種情況的過濾器稱為主動過濾器。
2 管道
管道作為過濾器之間數據流動的通道的軟件部件,它的主要功能是連接各個過濾器,充當過濾器之間數據流的通道。管道具有數據緩沖以及提高過濾器之間的並行性操作的作用。管道由數據緩沖區,向數據緩沖區讀和寫數據,判斷管道為空或已滿等操作定義組成
管道/過濾器模式的優點如下。
(l)體現了各功能模塊的“黑盤”特性及高內聚、低耦合的特點。
(2)可以將整個系統的輸入,輸出行為看成是多個過濾器行為的簡單合成。
(3)支持軟件功能模塊的重用。
(4)便於系統維護:新的過濾器可以添加到現有系統中來,舊的可以由改進的過濾器替換。
(5)支持某些特定的分析,如吞吐量計算、死鎖檢測等。
(6)支持並行操作,每個過濾器可以作為一個單獨的任務完成。
管道,過漶器模式的缺點如下。
(1)通常導致系統處理過程的成批操作。
(2)需要設計者協調兩個相對獨立但又存在關系的數據流。
(3)可能需要每個過濾器自己完成數據解析和合成工作(如加密和解密),從而導致系統性能下降,並增加了過濾器具體實現的復雜性。