パイプとフィルターは、モジュール性を使用して、実装の容易さと、関連するモジュールの構成による汎用性を目的とした、divide-et-imperaのアプリケーションです。
これは、ソース ストリーム、オブジェクト、または信号の複数の処理実行を含む問題を解決するときに最も有用であり、同じタイプの変更されたストリーム、オブジェクト、または信号の生成を要求します。
これはfilterと呼ばれる単純な小さな処理ユニットに基づいており、それらはすべて同じコントラクトに従います (入力で同じオブジェクト/ストリーム タイプとオプションのパラメーターを取得し、処理されたストリーム/オブジェクトを返します)。各フィルター入力は、(別の、またはそれ自体の別のインスタンス) フィルター出力、またはソース ( pumpと呼ばれる) に接続できます。同様に、各フィルター出力は、フィルター入力またはアーキテクチャの戻りオブジェクト/スチーム (と呼ばれる) に接続できます。シンク)。接続ユニットはパイプと呼ばれ、フィルターで行われる処理のさまざまなステップを介してストリーム/オブジェクト/シグナルをルーティングするためにマネージャー クラスによって使用されます。
コントラクトを指定する際の取り決めは、他のフィルターやフロー処理全体について他に何も知らなくても、各フィルターが自律的に動作できることです。つまり、フィルターを透過的に交換して、異なる最終結果を生成することもできます。
フィルター インスタンスは異なるストリームで同時に実行できますが、通常、パイプとフィルター パターンは同時操作には使用されません。これは、各フィルターがほとんど同じリソースへのアクセスを必要とするためです。
- ソフトウェアの例: 画像処理のフィルター
- 実際の例: ギターとアンプの間のサウンド信号を処理するペダル エフェクト。