ホームページ >バックエンド開発 >PHPチュートリアル >PHP 草の根理論 デザインパターン - 戦略パターン

PHP 草の根理論 デザインパターン - 戦略パターン

WBOY
WBOYオリジナル
2016-06-23 13:47:40909ブラウズ

一連のアルゴリズムを定義し、それらを 1 つずつカプセル化し、交換可能にします。このパターンでは、アルゴリズムを使用するクライアントとは独立してアルゴリズムを変更できます。

意図

戦略パターン

一連のアルゴリズムを定義し、それらを 1 つずつカプセル化し、交換可能にします。このパターンにより、アルゴリズムを使用するクライアントとは独立してアルゴリズムを変更できます。

適用性

  • 多くの関連クラスは単に動作が異なります。ストラテジーは、いくつかの動作のいずれかを使用してクラスを構成する方法を提供します。
  • アルゴリズムのさまざまなバリエーションを使用する必要があります。たとえば、さまざまな空間/時間のトレードオフを反映するアルゴリズムを定義できます。 Strategy パターンは、これらのバリアントがアルゴリズムのクラス階層として実装されている場合に使用できます。
  • アルゴリズムは、顧客が知ることを想定されていないデータを使用します。 Strategy パターンを使用すると、複雑なアルゴリズム関連のデータ構造の公開を回避できます。
  • クラスは複数の動作を定義し、これらの動作は、このクラスの操作で複数の条件文の形で現れます。関連する条件分岐をそれぞれの Strategy クラスに移動して、これらの条件文を置き換えます
  • パターン自体の概念については、インターネット上の他の記事を参照してください

    実際の開発プロセスにおけるアプリケーションのみPHP についてはここで説明します

    このモードは、アルゴリズムをデータから分離します

    アルゴリズム: 固定構造の入力データに対して固定構造の出力を生成する、異なるアルゴリズムが同じ入力を持ちます。

    データ: データを保持するオブジェクト/クラス定義: このパターンを適用するシナリオ:

    1. 異なるタイプの複数のデータ オブジェクト。同じ構造 Data.

    2. 同じクラスまたは同じインターフェイスを実装する複数のアルゴリズム オブジェクト

    3. 呼び出し元は、最初にどのアルゴリズム オブジェクトが使用されるかをデータ オブジェクトに伝え、その後、データ オブジェクトは指定されたアルゴリズム オブジェクトを使用します。ビジネス ロジック内でデータが処理されます。

    使用制限:

    1. 通常、PHP は数学的な計算タスクには使用されず、そのようなタスクは通常 C/C++/Java によって実行されます

    2. 複数のデータ オブジェクト。複数のアルゴリズム オブジェクトを使用する場合、一般的な PHP ビジネス ロジックはここまで複雑ではありません。

    例を想像してください。プログラムには複数の業務処理クラスがあり、業務処理プロセスのログを記録する必要があります。利用可能なロギング メソッド 選択: テキスト/データベース/ネットワーク アプリケーション。呼び出し元は、使用するロギング メソッドを選択できます。

    実装プロセス:

    1. まず、ログの親クラス/インターフェイスを定義し、次に 3 つの特定のログ実装クラスを作成します。

    インターフェース LogInterface {

    public function log($data);

    //データをテキストファイルに書き込む

    }

    }

    class LogDBimplement s LogInterface{

    アウトアウトアウトスルー「 's」を通り抜けて、外出 - - - - - - - - - - - - - - - - - - - - - - - - - - - クラスログネットを実装してくださいloglterface {$ data){

    レコード固有のログオブジェクト

    //ビジネスクラスで使用される関数

    //外部アクセスがない場合、このメソッドはプライベートとして定義できます

    //このメソッドの実装は変更することもでき、パラメータを使用してデータを渡すこともできます

    public function log( ){

    $this->_log->log($this->data);

    }

    }

    3. すべてのビジネス クラス (ログ機能が必要)

    / /このクラスは親クラスを継承している可能性があります

    class ModelA {

    use LogTrait;

    //ログを使用する必要があるビジネス クラス内の特定のコード セグメント

    public function process(){

    //ログ用のデータを準備します

    $this->data=$data;

    //ログを記録します。このコードはこのクラス内で複数回出現するか、外部から呼び出すことができます

    $this->log ();

    }

    }

    声明:
    この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。