在管道-過濾器架構模式中,每個構件都有一組輸入,輸出,構件讀取輸入的數據流,經過內部處理后,產生輸出數據流,該過程主要完成輸入流的變換及增量計算。這里的構件就是過濾器,而連接過濾器的就是管道,這個管道將上一個過濾器處理的結果數據流傳送到下一個過濾器,在進行其他的計算。
簡單來說,管道-過濾器模式結構就像是一條產品加工流水線,原材料在流水線上經過一個個工人的加工,最終生產出產品。這里的工人就是過濾器,將材料進行加工,流水線中的傳送帶就是管道,將一個工人加工過得材料傳送給下一個工人繼續加工。

應用場景
1.由一個應用程序所需的處理可以很容易地被分解成一組離散的,獨立的步驟。
2.由應用程序執行的處理步驟具有不同的可擴展性要求。
優勢
(1)使得構件具有良好的隱蔽性和高內聚、低耦合的特點;
(2)允許設計者將整個系統的輸入/輸出行為看成是多個過濾器的行為的簡單合成;
(3)支持軟件重用。重要提供適合在兩個過濾器之間傳送的數據,任何兩個過濾器都可被連接起來;
(4)系統維護和增強系統性能簡單。新的過濾器可以添加到現有系統中來;舊的可以被改進的過濾器替換掉;
(5)允許對一些如吞吐量、死鎖等屬性的分析;
(6)支持並行執行。每個過濾器是作為一個單獨的任務完成,因此可與其它任務並行執行;
案例
編譯器就是基於管道過濾器模式設計的:
輸入:源程序
預處理:負責宏展開和去掉注釋等工作。
編譯:進行詞法分析、語法分析、語義分析、代碼優化和代碼產生。
匯編:負責把匯編代碼轉換成機器指令,生成目標文件。
鏈接:負責把多個目標文件、靜態庫和共享庫鏈接成可執行文件/共享庫。
輸出:可執行文件/共享庫。
編譯器的每個步驟都是相互分離的,可以獨立存在,每個步驟完成之后得到的結果交給下一個步驟進行處理,每一步的處理之間都依靠輸入輸出的數據流來維系關系,正好符合管道-過濾器模式,並且每個處理都只是依賴上一步處理的結果,並不依賴處理過程,所以程序的耦合度很低,內聚性很高,每一步都有很高的擴展性。
