管道-過濾器模式學習總結


管道-過濾器模式

模式簡介

  管道-過濾器模式是一種面向數據流的軟件體系結構。主要由管道和過濾器組成,過濾器為一個具體的處理模塊,接受輸入數據然后進行一定的處理,最后進行輸出;管道是傳輸數據的組件,用於將數據從一個過濾器的輸出接口傳送到下一個過濾器的輸入接口。
  管道-過濾器模式可以很好地實現功能分解,通過將不同的功能用不同的過濾器進行實現,然后在用管道將各個過濾器相連,可以很好地實現封裝與功能分解,利用管道-過濾器模式架構開發的軟件可以很好地進行移植,提高了軟件模塊的重用性,同時也可以方便地將某一個舊過濾器用一個新過濾器進行更換,實現功能的修改或者更新,而不用修改軟件項目中其他的過濾器。

模式具體結構組成

  管道-過濾器模式由兩大組件構成。一個為過濾器,另一個為管道。
  過濾器:主要功能為從輸入接口中讀取數據,然后經過特定的處理,將結果數據置於輸出接口。過濾器是一個獨立的實體,只負責自身的處理,不用考慮其他過濾器的輸入和輸出數據。過濾器分為三類,分別為輸入過濾器、處理過濾器和輸出過濾器。
  管道:是連接各個過濾器的組件,負責過濾器間數據的傳輸,充當過濾器之間數據流的通道。

模式優缺點

優點:

  1. 符合高內聚、低耦合的設計原則,可以方便地對過濾器進行替換或刪除等操作。
  2. 支持模塊的重用,可以將單個獨立的過濾器應用到其他軟件系統中
  3. 支持並行執行。每個過濾器是一個獨立的實體,可以單獨運行,不受其他過濾器影響。

缺點:

  1. 不適合處理交互的應用。
  2. 傳輸的數據沒有標准化,所以讀入數據和輸出數據存在着格式轉換等問題,會導致性能的降低。

特定環境

  一個軟件的處理流程由多個復雜的過程組成,而且每個處理過程依次執行,前一個處理為后一個處理提供必要的數據,后一個過程需要前一個過程提供數據支持。每個復雜的過程有自己獨特的處理邏輯,可以對輸入數據全部進行處理,也可以根據自己的特定情況只對一部分數據進行處理,或者作出一些特定的動作,最后輸出最終的結果作為軟件的執行結果。

特定環境中的問題

  軟件由多個復雜的處理流程組成,每個處理有自己獨特的處理邏輯,流程不容易控制,每個流程的輸出不容易得到及時的反饋,編寫代碼較為復雜,處理流程混亂,不容易形成體系結構,不容易進行任務的分解與分工,而且代碼不容易測試及維護。

問題解決方案

  采用管道-過濾器模式進行軟件體系結構的設計。軟件由多個獨立的處理劉才能組成,則將每個處理流程當做一個過濾器,過濾器是由一個輸入接口、一個處理模塊和一個輸出接口組成,而且是一個獨立的實體。滿足處理過程的獨立處理,接受輸入和輸出的要求。而且過濾器有自己的處理機制,可以對所有的輸入都進行處理,還可以對一部分數據進行處理,還可以進行數據的檢測,當數據不滿足要求時,可以及時地做出回應,進行錯誤處理。而且管道作為數據的傳輸介質在過濾器之間進行數據的傳輸,很好地滿足了流程的處理。同時在滿足系統要求的情況下很好地滿足了代碼的分解,形成了很多獨立的過濾器模塊,使軟件代碼解耦合,做到了高內聚、低耦合的設計原則,所以很容易進行測試和維護,在某些過濾器需要替換或刪除時,可以很好地進行操作,而不需要修改太多的代碼,而且也不會影響到其他的過濾器,同時過濾器還可以重用。提高了代碼的可重用性。所以通過應用管道-過濾器模式可以很好地解決軟件需要進行流程處理的需求。

模式結構圖

應用實例

  最典型的應用是編譯系統,編譯系統主要包括詞法分析器,語法分析器,語義分析與中間代碼生成器,優化器,目標代碼生成器等對源程序進行處理的過程。可以將每個處理過程看做一個過濾器,然后通過管道進行連接,然后就組成了一個編譯系統。

  如上圖所示源程序輸入到編譯系統,編譯系統先經過詞法分析過濾器,詞法分析過濾器讀取輸入的數據,然后進行詞法分析按詞法規則得出各類單詞,最后將分析得出的結果在輸出接口輸出;管道將該詞法分析結果傳送到語義分析過濾器,語義分析與中間代碼生成過濾器檢測程序代碼有無語義錯誤,沒有錯誤則生成中間代碼並輸出,若有錯則進行錯誤處理;然后再經管道將中間代碼傳送到優化器,…按照過濾器處理,管道進行數據傳送這種模式最終得到編譯后的數據,這就是管道-過濾器的最典型的應用。

參考文獻:

  1. 李小龍,毛文林. 管道-過濾器模式的軟件體系結構及其設計[J]. 計算機工程與應用,2003,(35):114-115+182.
  2. 蔣慶. 新型管道—過濾器模式的研究及其應用[D].江西師范大學,2004.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM