1 戦略パターンの概要 戦略パターンは、一連のアルゴリズムを定義し、各アルゴリズムをカプセル化し、それらを交換可能にします。 Strategy パターンを使用すると、アルゴリズムを使用するクライアントとは独立してアルゴリズムを変更できます。
2 パターンの構成 1) 抽象戦略の役割 (Strategy):
Strategy クラス。通常はインターフェイスまたは抽象クラスによって実装されます。 本文 2) 具体的な戦略:
関連するアルゴリズムと動作をパッケージ化。
3) 環境の役割 (コンテキスト):
最終的にクライアントによって呼び出される戦略クラスへの参照を保持します。
アルゴリズムクラスを使用しています。コマンド モードのアルゴリズムは互いに独立しており、各コマンドによって実行される作業は異なります。戦略パターンも同じ働きをします。
4 パターンアーキテクチャ図
5 プログラムアーキテクチャ
1) 抽象的な戦略 (Strategy)
// 定义接口,定义了要实现的策略算法interface IStrategy{ // 算法方法 public function doFunction();}
れー
// 具体A策略class ConcreteStrategyA implements IStrategy{ public function doFunction(){ echo '算法A实现'; }}// 具体B策略class ConcreteStrategyB implements IStrategy{ public function doFunction(){ echo '算法B实现'; }}// 具体C策略class ConcreteStrategyC implements IStrategy{ public function doFunction(){ echo '算法C实现'; }}
// 环境类,维护一个Strategy应用class Context{ // 策略 private $_strategy = null; public function __construct(IStrategy $strategy){ $this->_strategy = $strategy; } public function doWork(){ return $this->_strategy->doFunction(); }}
りー
2) StrategyPattern.php
// 客户端类class Client{ public function main($data){ // A策略 $context = new Context(new ConcreteStrategyA()); $context->doWork(); // B策略 $context = new Context(new ConcreteStrategyB()); $context->doWork(); // C策略 $context = new Context(new ConcreteStrategyC()); $context->doWork(); }}
3) Strategy.php と StrategyPattern.php 内。さらに戦略を拡張する必要がある場合は、課金インターフェイスを継承してさらに多くのクラスを実装するだけで済みます。これは、単純なファクトリ パターンと組み合わせて使用されます。手順がより明確になります。
7 概要
7.1 利点:
著作権声明:
1) オリジナル作品、「CleverCode's Blog」から転載する場合は、必ず次の元のアドレスを明記してください。そうでない場合は、著作権法的責任を負うことになります。
2) 元のアドレス: (再印刷する場合は、必ずこのアドレスを指定してください)。3) もっとエキサイティングなコンテンツを求めて私のブログをフォローしてくださる皆様を歓迎します:。