一連のアルゴリズムを定義し、それらを 1 つずつカプセル化し、交換可能にします。このパターンでは、アルゴリズムを使用するクライアントとは独立してアルゴリズムを変更できます。
意図
戦略パターン
一連のアルゴリズムを定義し、それらを 1 つずつカプセル化し、交換可能にします。このパターンにより、アルゴリズムを使用するクライアントとは独立してアルゴリズムを変更できます。
適用性
パターン自体の概念については、インターネット上の他の記事を参照してください
実際の開発プロセスにおけるアプリケーションのみ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 ();
}
}