前回の記事「PHP のコマンド モードの詳細分析」では PHP のコマンド モードについて紹介しましたが、この記事では PHP のストラテジ モードについて説明します。
戦略パターンは、ポリシー パターンとも呼ばれ、動作設計パターンです。
GoF 定義: 一連のアルゴリズムを定義し、それらを 1 つずつカプセル化し、互換性を持たせます。このパターンでは、アルゴリズムを使用するクライアントとは独立してアルゴリズムを変更できます。
#GoF クラス図
##コード実装interface Strategy{
function AlgorithmInterface();
}
class ConcreteStrategyA implements Strategy{
function AlgorithmInterface(){
echo "算法A";
}
}
class ConcreteStrategyB implements Strategy{
function AlgorithmInterface(){
echo "算法B";
}
}
class ConcreteStrategyC implements Strategy{
function AlgorithmInterface(){
echo "算法C";
}
}
class Context{ private $strategy; function __construct(Strategy $s){ $this->strategy = $s; } function ContextInterface(){ $this->strategy->AlgorithmInterface(); } }
実行環境コンテキストを定義します。
$strategyA = new ConcreteStrategyA(); $context = new Context($strategyA); $context->ContextInterface(); $strategyB = new ConcreteStrategyB(); $context = new Context($strategyB); $context->ContextInterface(); $strategyC = new ConcreteStrategyC(); $context = new Context($strategyC); $context->ContextInterface();
最後に、必要に応じてクライアント側で適切なアルゴリズムが呼び出されます。
とてもシンプルなデザインパターンではないでしょうか。このモデルは、最初に説明した#完全なコード: https://github.com/zhangyue0503/designpatterns-php/blob/master/10.strategy/source/strategy.php
# #Example SMS 機能はまだあります。具体的な要件については、Simple Factory
SMS 送信クラス図
完全なソース コード: https://github.com/zhangyue0503/designpatterns- php /blob/master/10.strategy/source/strategy-message.php
<?php interface Message { public function send(); } class BaiduYunMessage implements Message { function send() { echo '百度云发送信息!'; } } class AliYunMessage implements Message { public function send() { echo '阿里云发送信息!'; } } class JiguangMessage implements Message { public function send() { echo '极光发送信息!'; } } class MessageContext { private $message; public function __construct(Message $msg) { $this->message = $msg; } public function SendMessage() { $this->message->send(); } } $bdMsg = new BaiduYunMessage(); $msgCtx = new MessageContext($bdMsg); $msgCtx->SendMessage(); $alMsg = new AliYunMessage(); $msgCtx = new MessageContext($alMsg); $msgCtx->SendMessage(); $jgMsg = new JiguangMessage(); $msgCtx = new MessageContext($jgMsg); $msgCtx->SendMessage();
説明
次のクラスの比較に注意してください。基本的に図と Simple Factory
パターンに違いはありません推奨研究: "PHP ビデオ チュートリアル
>>
以上がPHP の戦略パターンについて話しましょうの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。