模式是軟件開發(fā)實踐智慧的結晶,它作為一種理論反過來對軟件的開發(fā)又起著指導作用。根據軟件開發(fā)的階段以及開發(fā)的粒度,模式可分為:體系結構模式、設計模式和慣用法?1。而本文的管道和過濾器模式是體系結構模式中的一種
1 主要的特征是:
(1)為處理數據的系統(tǒng)提供了一種結構;
(2)每個處理步驟封裝在一個過濾器組件中,每個過濾器可以單獨修改,其功能單一;
(3)數據通過相鄰過濾器之間的管道傳輸;
(4)重組過濾器可以建立相關的系統(tǒng)族;
(5)過濾器是獨立運行的部件:
?、倜總€過濾器除了輸入和輸出外,受了壬何其他過濾器運行的影響。也就是,在設計上過濾器之間不共享任何狀態(tài)信息;
?、谝粋€過濾器對其處理的上游和下游連接的過濾器是“無知”的;獨立性還表現在它的設計和使用不對與其連接的任何過濾器施加限制,唯一關心的是其輸人數據,然后進行加工處理,最后產生數據輸出。該模式應用的基本特點是:把系統(tǒng)任務分成幾個相連的處理步驟,一步驟的輸出是一步驟的輸入,而且數據的處理和控制并發(fā)進行。目前典型的管道過濾器體系結構的例子是以Unix sheu編寫的程序。Unix既提供一種符號,以連接各組成部分(Unix的進程),又提供某種進程運行時機制以實現管道。另一個著名的例子是傳統(tǒng)的編譯器。傳統(tǒng)的編譯器一直被認為是一種管道系統(tǒng),在該系統(tǒng)中,一個階段(包括詞法分析、語法分析、語義分析和代碼生成)的輸出是另一個階段的輸入。
2 問題
在處理數據流的語境中,建立一個必須處理或轉換輸入數據流的系統(tǒng)。這樣的系統(tǒng)需要滿足以下強制條件:對數據的處理可以容易地分成幾個處理步驟;操作順序精確一致;數據順序精確一致;處理并行性;系統(tǒng)的升級可以通過替換/增an/重組處理步驟實現,有時甚至由使用者完成操作;不同的處理步驟不共享信息;存在不同的輸人數據源;負載要求盡可能的平衡。在該系統(tǒng)中可進一步細分如下四種:(1)將系統(tǒng)任務分成幾個順序的處理步驟,這些步驟之間通過數據流連接,每個步驟稱為過濾器。(2)系統(tǒng)的輸人由諸如文本文件,或者其他的數據源提供。(3)系統(tǒng)的輸出流人數據匯點。(4)管道連接數據源、過濾器和數據匯點,它負責實現相鄰步驟之間的數據流動。
3 系統(tǒng)用到的四種數據結構
3.1過濾器結構
過濾器是流水線的處理單元,負責豐富,提煉或轉換它的輸人數據,如圖1所示。它以下面的三種方式工作:隨后的流水線單元從過濾器中拉出數據(被動過濾器);前面的流水線單元把新的輸人數據壓人過濾器(被動過濾器);過濾器以循環(huán)的方式工作,從流水線中拉出輸人數據并且將其輸出數據壓人流水線(主動過濾器)。
3.2管道結構
管道表示過濾器之間的連接;數據源和第一個過濾器之間的連接;以及最后的過濾器和數據匯點之間的連接。如果管道連接兩個主動過濾器,那么管道需要進行緩沖和同步,如圖2所示。如果兩個主動組件是由管道中的某個過濾器控制,那么管道可以直接調用來實現。但是,直接的調用將使得過濾器的重組更加困難。
數據源表示系統(tǒng)的輸人,它提供一系列相同結構或類型的值,如圖3所示。流水線的數據源可以主動地把數據值推人第一個處理階段,也可以在第一個過濾器拉出時被動地提供數據。
3.4數據匯點
數據匯點收集來自流水線端的結果,如圖4所示。其工作方式有兩種:主動數據匯點把前面處理階段的結果拉出來;被動數據匯點允許前面的過濾器把結果推或寫進出。
4 管道和過濾器模式的動態(tài)特性
流水線規(guī)定了數據流的流動方向,但是其控制流根據不同的情況可以有多種方式。具體到確定控制流,可以根據實際的系統(tǒng)中有哪些主動組件來確定。以下是動態(tài)特性的四種場景(其中n和f2是計算函數)。
場景1:推進流水線,其活動從數據源開始,每個過濾器是被動的過濾器。如圖5所示:
場景2:拉出流水線,其活動從數據匯點開始,每個過濾器是主動過濾器。如圖6所示。
場景3:推一拉流水線,其活動從第二個過濾器開始。如圖7所示:
場景4:典型的管道個過濾器系統(tǒng),所有的過濾器都循環(huán)主動拉出、計算并推人數據。在這種情況下,每個過濾器以它自己的控制線程運行,過濾器之間利用管道進行同步。如圖8所示:
5 實現方案
5.1將系統(tǒng)任務分成一系列處理階段
(1)每個階段必須只依賴前一階段的輸出。
(2)需要注意替換處理步驟時的方法:重新設計時替換;運行時刻替換;安裝后進行替換。
5.2定義沿每個管道傳輸的數據格式
(1)定義一個統(tǒng)一的格式可以獲得最大的靈活性,但是可能帶來效率問題。
(2)必須定義如何標識輸人結束:0值,一1值等。
(3)可能需要有其他的語義控制標志:比如數據幀結束,數據異常標志等。
5.3決定如何實現每個管道連接
(1)確定每個過濾器是被動的還是主動的。
(2)定義每個過濾器的數據是由壓人數據還是由拉出數據啟動的。
(3)定義數據如何傳遞:通過直接調用;通過分離的管道機制進行緩沖和同步;同時,使用相同的管道機制使得過濾器重組更加容易。
5.4設計和實現過濾器
(1)基于過濾器需要完成的任務,相鄰的管道來設計過濾器。
(2)考慮地址空間之間拷貝數據的需要。
(3)考慮管道緩沖區(qū)大小。
(4)考慮重用過濾器,能夠按照特定的方式控制他們的行為:從哪個管道讀取數據?向那個管道輸送數據?
5.5設計出錯處理
(1)錯誤處理很難做到,往往被忽略。
(2)如果一個過濾器在其輸人數據中探測到錯:它可以忽略輸入,直到一些清楚的分隔符出現;停止處理,重置狀態(tài),等待某個特定的開始符號出現。
(3)很難給出處理錯誤的一般策略。
5.6考慮管道的動態(tài)重組
(1)當需要重組過濾器的時候,首先要考慮在什么時候可以進行動態(tài)重組?
(2)如何重新定向過濾器的輸人和輸出?
(3)由誰啟動?是否在輸人數據流中增加控制符號?
6 管道和過濾器的一個應用實例
假若要開發(fā)這樣的軟件:汽車牌照識別系統(tǒng)[引。該系統(tǒng)一般可順序地分為車輛圖像獲取、車輛牌照子圖像定位與分割、字符識別。流程如圖9所示:
由于系統(tǒng)任務分成幾個順序的處理步驟,這些步驟之間通過數據流連接,而且前一步驟的輸出是下一步驟的輸人,如圖10。因而開發(fā)整個系統(tǒng)可應用管道和過濾器模式。整個系統(tǒng)不僅如此,每一個步驟也具有該特征。該系統(tǒng)的關鍵步驟是上圖的第一和第二兩個方框圖,并且第二個框圖的開發(fā)質量直接影響到第三個框圖?,F在用管道和過濾器模式來開發(fā)第二個方框圖的牌照子圖像的定位。相應的對象建模圖可設計成圖1 1:
該對象建模圖出現的場景如下[ ]:
· 彩色位圖的輸人是通過視頻捕獲到的24位真彩色圖。
· 為了便于對圖像的處理,將彩色圖進行灰度化形成8位的灰度圖。這可采用主動過濾器來調用LoadBitMap()函數得到灰度化的數據流。灰度化可以采用現行標準的平均值算法g=0.3R+0.59G+0.1lB。(g:表示灰度化后的值,R、G、B表示紅綠藍三元色)
· 由于得到的圖像一般有一些缺陷,例如成像時光線不足,使得整幅圖偏暗,或者成像時光照過強,使得整幅圖偏亮,從而造成圖像的對比度偏低,這就需要進行灰度拉伸?;叶壤炜稍O計成主動過濾器,來調用灰度化函數ColorTransGray()來作為自己的數據輸人。
· 邊緣提取也可采用主動過濾器,調用灰度拉伸函數GrayStreteh()作為自己的數據輸人。其算法可用RoberDIB,SobelDIB,Prewitt中的一種,產生的是邊緣幅度圖像,用Hough變換提取直線的算法進一步來補充產生的邊緣幅度圖像。
· 模板匹配可設計成Pull和Push過濾器,一方面它將邊緣提取函數的輸出作為自己的數據流輸人,通過調用邊緣提取函數來完成。另一方面將模板匹配計算的結果壓人管道進行緩存。
· 驗證并輸出圖像對象讀取管道中的數據,調用CoutImage()函數輸出字符分割對象。
7 效果
7.1管道和過濾器模式有許多優(yōu)點
可通過組件的重組和重用來創(chuàng)建新的處理流水線,例如在實例中,汽車牌照定位系統(tǒng)是一個沒有數據匯點的處理流水線,將它加人到字符分割識別處理流水線中,在加上前面的圖像的獲取形成一個新的處理流水線一汽車牌照識別系統(tǒng)。也就是說管道和過濾器的重組和重用的特性增加了軟件開發(fā)的靈活性。處理數據流不一定需要中問文件,這是管道和過濾器的又一個優(yōu)點。在一個把中間結果放在文件中的系統(tǒng),文件目錄的安排策略是不容易的。而且在每次運行系統(tǒng)時不得不重新建立處理步驟,這種方法是易出錯的。
7.2管道和過濾器模式也有它自己的不足
第一,不相連的處理步驟不共享信息。假如該模式有大量的共享全局數據,那么用該模式建立的系統(tǒng)不僅不夠靈活,而且還很昂貴。第二,對所有過濾器的輸人和輸出使用單數據格式增加了數據轉換的額外開銷。第三,錯誤恢復和錯誤處理策略難以實現。
8 結束語
本文只討論了管道和過濾器模式,它只是許多模式中的一種。模式覆蓋了軟件開發(fā)的各個方面,根據不同的應用應選擇不同的模式,或者多種模式同時并存。例如用代理者模式、微核模式、管道和過濾器模式來開發(fā)分布式系統(tǒng),用M—A—V模式和P—A—V模式來開發(fā)交互式系統(tǒng),用映像模式和微核模式來開發(fā)適應式系統(tǒng),等等,這樣形成了模式系統(tǒng)_1 J。特別在軟件開發(fā)的過程當中,要利用我們的經驗和智慧來開發(fā)挖掘模式、組織模式和利用模式,在軟件開發(fā)中發(fā)揮指導作用。
標簽:
相關技術