管道-過濾器模式的體系結構是面向數據流的軟件體系結構。它最典型的應用是在編譯系統。一個普通的編譯系統包括詞法分析器,語法分析器,語義分析與中間代碼生成器,優化器,目標代碼生成器等一系列對源程序進行處理的過程。人們可以將編譯系統看作一系列過濾器的連接體,按照管道-過濾器的體系結構進行設計。此外,這種體系結構在其它一些領域也有廣泛的應用。因此它成為軟件工程和軟件開發中的一個突出的研究領域。
管道-過濾器模式組成
1 過濾器
過濾器按照對流經它的數據操作的不同,可分為3類過濾器:輸入過濾器,處理過濾器和輸出過濾器。下面將對這三類過濾器進行介紹。
(1)輸入過濾器
輸入過濾器處在問題所在的外部世界與軟件系統的邊界處,是系統數據流的源點。它負責接收外界信息並轉化為系統所需的數據流。
(2)處理過濾器
處理過濾器是系統內變換數據流的部件,它有一個入口和一個出口,數據經入口流入,經過處理過濾器內部處理之后從出口流出。
(3)輸出過濾器
從建立完備的,首尾一致的可重用的軟件部件組的角度出發,正如輸入過濾器是系統數據流的起點,那么輸出過濾器是數據流的終點。
過濾器的實現還須滿足以下三條基本原理:
隨后的處理單元從過濾器中拉出輸出數據;
前面的處理單元把新的輸入數據壓入過濾器;
過濾器以循環工作的方式,從流水線中拉出其輸入數據並且將其輸出數據壓入流水線。過濾器按照以上三種情況可分為兩類:主動過濾器和被動過濾器。滿足前兩種情況的過濾器稱為被動過濾器,滿足最后一種情況的過濾器稱為主動過濾器。
2 管道
管道作為過濾器之間數據流動的通道的軟件部件,它的主要功能是連接各個過濾器,充當過濾器之間數據流的通道。管道具有數據緩沖以及提高過濾器之間的並行性操作的作用。管道由數據緩沖區,向數據緩沖區讀和寫數據,判斷管道為空或已滿等操作定義組成.
模式優缺點
優點
(1)管道-過濾器模型有如下的優點: 設計人員將整個系統的輸入輸出行為理解為單個過濾器行為的疊加與組合。這樣可以將問題分解,化繁為簡。
(2)任何兩個過濾器,只要它們之間傳送的數據遵守共同的規約就可以相連接。每個過濾器都有自己獨立的輸入輸出接口,如果過濾器間傳輸的數據遵守其規約,只要用管道將它們連接就可以正常工作。
(3)整個系統易於維護和升級:舊的過濾器可以被替代,新的過濾器可以添加到已有的系統上。軟件的易於維護和升級是衡量軟件系統質量的重要指標之一,在管道-過濾器模型中,只 要遵守輸入輸出數據規約,任何一個過濾器都可以被另一個新的過濾器代替,同時為增強程序功能,可以添加新的過濾器。這樣,系統的可維護性和可升級性得到了保證。
(4)支持並發執行:每個過濾器作為一個單獨的執行任務, 可以與其它過濾器並發執行。過濾器的執行是獨立的,不依賴於其它。
缺點
- 不適合處理交互的應用。
- 傳輸的數據沒有標准化,所以讀入數據和輸出數據存在着格式轉換等問題,會導致性能的降低。
模式使用的環境
一個應用程序可能需要執行各種關於它處理的信息不同復雜的任務。一個簡單,但不靈活的方式來實施這個應用程序可以執行此處理為單一模塊。然而,這種方法有可能減少用於重構代碼,對其進行優化,或者重新使用它,如果是在應用程序中其他地方所需要的相同的處理的部件的機會。
問題
軟件由多個復雜的處理流程組成,每個處理有自己獨特的處理邏輯,流程不容易控制,每個流程的輸出不容易得到及時的反饋,編寫代碼較為復雜,處理流程混亂,不容易形成體系結構,不容易進行任務的分解與分工,而且代碼不容易測試及維護。
解決方案
采用管道-過濾器模式進行軟件體系結構的設計。軟件由多個獨立的處理劉才能組成,則將每個處理流程當做一個過濾器,過濾器是由一個輸入接口、一個處理模塊和一個輸出接口組成,而且是一個獨立的實體。滿足處理過程的獨立處理,接受輸入和輸出的要求。而且過濾器有自己的處理機制,可以對所有的輸入都進行處理,還可以對一部分數據進行處理,還可以進行數據的檢測,當數據不滿足要求時,可以及時地做出回應,進行錯誤處理。而且管道作為數據的傳輸介質在過濾器之間進行數據的傳輸,很好地滿足了流程的處理。同時在滿足系統要求的情況下很好地滿足了代碼的分解,形成了很多獨立的過濾器模塊,使軟件代碼解耦合,做到了高內聚、低耦合的設計原則,所以很容易進行測試和維護,在某些過濾器需要替換或刪除時,可以很好地進行操作,而不需要修改太多的代碼,而且也不會影響到其他的過濾器,同時過濾器還可以重用。提高了代碼的可重用性。所以通過應用管道-過濾器模式可以很好地解決軟件需要進行流程處理的需求。