ソフトウェア設計における一般的な設計パターン

一般的な設計パターンとアプリケーション シナリオは次のとおりです。

  1. ファクトリ パターン: オブジェクトの作成に使用され、特定のオブジェクトの作成詳細を非表示にします。クライアントはファクトリ インターフェイスを通じてオブジェクトを取得するだけで済みます。アプリケーション シナリオには、さまざまなパラメーターに基づいてさまざまなタイプのオブジェクトを生成する必要がある場合、「開始と終了の原則」に従う必要がある場合、つまり、新しいタイプを追加する場合、新しいファクトリ クラスを追加するだけで済む場合が含まれます。

  2. シングルトン パターン: クラスがインスタンスを 1 つだけ持つことができ、グローバル アクセス ポイントを提供できるようにするために使用されます。通常、リソースを共有する必要がある場合、リソースへのアクセスを制御する必要がある場合、または単一のインスタンスのみが必要な場合に使用されます。

  3. オブザーバー パターン: 1 対多の依存関係を定義します。オブジェクトの状態が変化すると、そのすべての依存関係が通知され、自動的に更新されます。アプリケーション シナリオには、オブジェクト間の疎結合を実現する必要があるが、オブジェクト指向の継承を使用したくない場合や、イベント処理メカニズムを実装する必要がある場合が含まれます。

  4. アダプター パターン: クラスのインターフェイスをクライアントが予期する別のインターフェイスに変換し、互換性のないインターフェイスのために本来動作できないクラスが連携できるようにします。アプリケーション シナリオには、一部のクラスを再利用する必要があるが、これらのクラスのインターフェイスがコードと互換性がない場合、無関係なクラスまたは予期しないクラスで動作できる再利用可能なクラスを作成する必要がある場合が含まれます。

  5. 戦略パターン: アルゴリズムのファミリーを定義し、それらを相互に交換可能にします。アルゴリズムの使用と実装が分離され、クライアントは同じタスクを達成するために異なる戦略を柔軟に選択できます。アプリケーション シナリオには、いくつかのアルゴリズムを定義する必要があり、実行時にアルゴリズムの 1 つを動的に選択したい場合、オブジェクトに複数の動作があり、異なるシナリオで異なる動作を使用する可能性がある場合が含まれます。

  6. デコレータ パターン: オブジェクトに責任を動的に付加し、オブジェクトの機能を拡張します。これは、インターフェイスの一貫性を維持するラッパー オブジェクトを作成することによって行われます。アプリケーション シナリオには、オブジェクトの機能を強化する必要があり、元のクラス構造を変更したくない場合、オブジェクトに複数のオプション関数を追加する必要がある場合、さまざまな状況で関数のさまざまな組み合わせを選択することが含まれます。

  7. イテレータ パターン: 内部実装を公開せずに、集約オブジェクト内の個々の要素に順次アクセスする方法を提供します。これにより、走査アルゴリズムがデータ構造から分離され、走査方法を独立して変更できるようになります。アプリケーション シナリオには、集約オブジェクトの複雑な走査が必要な場合、集約オブジェクトの内部表現を公開せずに一般的な走査メソッドを提供する必要がある場合が含まれます。

  8. 状態パターン: オブジェクトの内部状態が変化したときにオブジェクトの動作を変更できるようにし、オブジェクトがそのクラスを変更したかのように見せます。さまざまな状態を独立したクラスにカプセル化し、状態が変化したときのオブジェクトの動作の管理、拡張、維持が容易になります。アプリケーション シナリオには、オブジェクトの動作がその状態に依存し、その状態が変化する可能性がある場合、異なる状態に基づいて異なる応答を行う必要がある場合が含まれます。

補充する

インタプリタ パターンは、言語の文法表現と、その言語の式を解釈するためのインタプリタを定義する動作設計パターンです。このモードは主に、コンパイラ、パーサーなど、特定のタイプの問題を解決するために使用されます。

インタープリター モードでは、通常、次の役割が含まれます。

  1. AbstractExpression: コンテキスト内の式を解釈するための抽象インターフェイスを定義します。

  2. 終端式: 抽象式インターフェイスを実装し、文法内の終端記号を表し、特定の解釈操作を実行します。

  3. 非終端式 (Non-terminal Expression): 抽象式インターフェイスを実装し、文法内の非終端記号を表し、再帰呼び出しによる複数の終端記号の解釈操作を実装します。

  4. コンテキスト: インタプリタが解釈操作に必要とするグローバル情報が含まれます。

インタプリタ パターンを使用して、複雑な文法規則を理解しやすく操作しやすいオブジェクトに変換する単純な言語インタプリタを構築します。言語の文法規則は、新しいインタプリタを追加したり、既存のインタプリタを変更したりすることで、柔軟に変更および拡張できます。

要約すると、インタプリタ パターンは、文法規則と対応するインタプリタを定義することによって、特定の言語を解釈して実行する機能を実装します。これを使用すると、いくつかの特定の分野における言語の解析と実行の問題に対処でき、文法規則の変更と拡張がより簡単かつ柔軟になります。

おすすめ

転載: blog.csdn.net/weixin_42797483/article/details/133081394