序文 比較的複雑な大規模システムでは、複雑なロジックで処理する必要があるオブジェクトまたはデータ フローが存在する場合、これらの複雑な論理プロセスを大規模なコンポーネントで実行することを選択できます。この方法は目的を達成しますが、単純で粗雑です。おそらく、この単純で粗雑なアプローチは、場合によっては問題を引き起こすでしょう。たとえば、処理ロジックの一部を変更したり、プロセスに処理ロジックを追加したり、プロセス内の処理ロジックを減らしたりしたい場合、ここでの一見単純な変更は、コンポーネント全体を変更する以外に、開始を困難にします。システム全体には拡張性と再利用性がないようです。 処理フロー全体を細かく分割できるモデルがあり、各小さなモジュールは互いに独立しており、ロジック処理の一部を担当します。これらのロジック処理の小さなモジュールは順番に接続され、前のモジュールの出力が次のモジュールの入力となり、最後のモジュールの出力が最終的な処理結果となります。これにより、ロジックを変更する際に特定のモジュールのみを変更すればよく、処理ロジックの追加や削減も特定のモジュール粒度に細分化でき、各モジュールを再利用できるため、再利用性が大幅に向上します。このモードは、この章で説明するパイプライン モードです。 名前が示すように、パイプライン モードは複数のオブジェクトをパイプラインのように接続します。全体的な外観は、パイプラインにネストされたいくつかのバルブのようであり、処理ロジックはバルブ上に配置されます。次の図に示すように、処理対象のオブジェクトがパイプラインに入ると、それぞれバルブ 1、バルブ 2、バルブ 3、バルブ 4 を通過します。各バルブは、入ってくるオブジェクトに対して何らかの論理処理を実行します。処理のレイヤーを経て、パイプラインの末尾から処理されます。このとき、オブジェクトは処理されたターゲット オブジェクトです。 パイプラインモードは非常に便利なので、プログラムで適切に使用することを検討してください。このモードを実現するには、複数のオブジェクトが連携する必要があります。次のクラス図を参照してください。Valveインターフェイスは、バルブの呼び出し方法を定義します。バルブは単一のリンクリスト構造を使用して互いに接続されているため、次に操作を提供する必要があります。バルブを実装して展開するだけです。Pipelineインターフェイスは、最初のバルブの取得、基本バルブの取得、バルブの追加などのメソッドを含む、パイプライン内のバルブを操作するためのメソッドを定義します。パイプラインはそれを展開する必要があります。 パイプライン パターンを簡単に実装する方法を見てみましょう。 ① バルブインターフェース パブリックインターフェースValve { パブリック Valve getNext(); public void setNext(Valve バルブ); public void 呼び出し(文字列処理); } ②パイプラインインターフェース パブリックインターフェースパイプライン{ パブリック Valve getFirst(); パブリック Valve getBasic(); public void setBasic(Valve バルブ); public void addValve(Valve バルブ); } ③ 基本的なバルブ、処理ロジックは単に入力文字列の「aa」を「bb」に置き換えることです パブリッククラス BasicValve は Valve を実装します { 保護されたバルブ next = null; パブリックバルブgetNext() { 次へ戻る; } パブリック void 呼び出し(文字列処理) { 処理 = handling.replaceAll("aa", "bb"); System.out.println("基本的なバルブ処理後: " + 処理); } パブリック void setNext(バルブ バルブ) { this.next = バルブ; } } ④ 2番目のバルブは、入力された文字列の「11」を「22」に置き換えます。 パブリッククラスSecondValveはValveを実装します{ 保護されたバルブ next = null; パブリックバルブgetNext() { 次へ戻る; } パブリック void 呼び出し(文字列処理) { 処理 = handling.replaceAll("11", "22"); System.out.println("2 番目のバルブが処理された後: " + 処理); getNext() を呼び出します (処理)。 } パブリック void setNext(バルブ バルブ) { this.next = バルブ; } } ⑤ 3番目のバルブは、入力文字列の「zz」を「yy」に置き換えます。 パブリッククラスThirdValveはValveを実装します{ 保護されたバルブ next = null; パブリックバルブgetNext() { 次へ戻る; } パブリック void 呼び出し(文字列処理) { 処理 = handling.replaceAll("zz", "yy"); System.out.println("3 番目のバルブが処理された後: " + 処理); getNext() を呼び出します (処理)。 } パブリック void setNext(バルブ バルブ) { this.next = バルブ; } } ⑥ パイプラインの場合、一般的な操作は、最初に setBasic を通じて基本バルブを設定し、次に他のバルブを順番に追加することです。実行順序は、最初に追加されたバルブが最初に実行され、基本バルブが最後に実行されます。 パブリッククラスStandardPipelineはPipelineを実装します{ 保護されたバルブ first = null; 保護されたバルブ basic = null; パブリック void addValve(バルブ バルブ) { if (first == null) { 最初 = バルブ; バルブを次の値に設定します。 } それ以外 { バルブ電流 = 最初; while (現在値 != null) { (current.getNext() == 基本) の場合 { current.setNext(バルブ); バルブを次の値に設定します。 壊す; } 現在の = current.getNext(); } } } パブリックValve getBasic() { 基本を返します。 } パブリックバルブgetFirst() { 最初に戻ります。 } パブリック void setBasic(バルブ バルブ) { this.basic = バルブ; } } ⑦ テストクラス パブリッククラスMain { パブリック静的voidメイン(String[] args) { 文字列処理="aabb1122zzyy"; StandardPipeline パイプライン = 新しい StandardPipeline(); BasicValve basicValve = 新しい BasicValve(); セカンドバルブ secondValve = new SecondValve(); サードバルブ thirdValve = new ThirdValve(); パイプラインにBasicバルブを設定します。 パイプラインに2番目のバルブを追加します。 パイプラインに第三のバルブを追加します。 パイプラインの getFirst() を呼び出します (処理)。 } } 出力は次のようになります。 2番目のバルブが処理された後: aabb2222zzyy 3番目のバルブが処理された後: aabb2222yyyy 基本バルブ処理後: bbbb2222yyyy これはパイプライン モードであり、パイプラインに 1 つ以上のバルブが接続されています。各バルブは論理処理の一部を担当し、データは規定の順序で流れていきます。このモードでは、論理処理タスクが分解され、タスク ユニットのインストールと分解が容易になり、プロセスのスケーラビリティ、再利用性、モビリティ、柔軟性が向上します。 以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。 以下もご興味があるかもしれません:
|
MySQL フルバックアップ1. バイナリログを有効にし、データベースから分離して別々に保存する v...
目次問題の説明シナリオインターフェースリターンフロントエンドメニューの定義vuex のメソッド問題原...
概要es6 では、配列またはオブジェクトから指定された要素を取得する新しい方法が追加されました。これ...
以前、Docker コンテナの起動後にボリュームをマウントできるかどうか尋ねられたことがあります。m...
CUDA とは何かを紹介するのではなく、複数の CUDA バージョンの共存とリアルタイム切り替えをど...
この記事は、参考のためにMySQL 8.0.19のインストールと設定のグラフィックチュートリアルを記...
序文MySQL データベースの文字列型は、CHAR、VARCHAR、BINARY、BLOB、TEXT...
データベースが同じデータ バッチを同時に追加、削除、および変更すると、ダーティ書き込み、ダーティ読み...
導入アニメーションを使用すると、JavaScript や jQuery に依存せずに、純粋な CSS...
序文実際のビジネスでは、ページングは一般的なビジネス要件です。次に、制限クエリを使用します。制限...
目次SQL文を挿入する前にレコードが既に存在するかどうかを確認するSQL挿入時の判断の簡単なコレクシ...
序文MySQL では、EXPLAIN コマンドを使用して、テーブルの接続方法や SELECT ステー...
目次1. Dockerイメージ2. 既存のイメージに基づいてインスタンスを作成する3. ローカルテン...
初心者は、いくつかの HTML タグを理解することで HTML を学習できます。この入門書は、初心者...
オープンソース ソフトウェアである Apache は、最も広く使用されている Web アプリケーショ...