ホームページ  >  記事  >  バックエンド開発  >  PHP の戦略パターンについて話しましょう

PHP の戦略パターンについて話しましょう

青灯夜游
青灯夜游転載
2021-07-09 19:34:343003ブラウズ

前回の記事「PHP のコマンド モードの詳細分析」では PHP のコマンド モードについて紹介しましたが、この記事では PHP のストラテジ モードについて説明します。

PHP の戦略パターンについて話しましょう

戦略パターンは、ポリシー パターンとも呼ばれ、動作設計パターンです。

Gof クラス図と説明

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

#GoF クラス図

PHP の戦略パターンについて話しましょう

##コード実装

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();

最後に、必要に応じてクライアント側で適切なアルゴリズムが呼び出されます。

とてもシンプルなデザインパターンではないでしょうか。このモデルは、最初に説明した
    Simple Factory
  • に非常に似ていることに気づきましたか?それでは、それらの違いは何でしょうか?
  • ファクトリ関連モードは作成モードです。名前が示すように、このモードはオブジェクトを作成し、新しいオブジェクトを返すために使用されます。オブジェクトのどのメソッドを呼び出すかを決定するのはクライアントです。
  • 戦略モード属性の動作モードは、実行コンテキストを通じて呼び出される関数メソッドをカプセル化します。クライアントは、メソッドを呼び出すだけで済みます。さて、
  • ここでは、クライアントが特定のアルゴリズム クラスをインスタンス化する必要があることがわかりますが、これは
  • Simple Factory
  • ほど簡単に使用できないようです。この場合、試してみてはいかがでしょうか工場を組み合わせるパターンも戦略パターンと合わせて実装してみてはいかがでしょうか? この実装は、考えるための質問として皆さんに任せます。ヒント: Context クラスの __construct を単純なファクトリ メソッドに変換します。
これは、単純な工場, 次に、単純な工場メソッドに従います: 私たちは携帯電話メーカー (クライアント) で、携帯電話のバッチを製造する工場 (ConcreteStrategy) を探したいと考えています。この工場に注文して携帯電話を製造します。チャネルプロバイダー (Context) チャネルプロバイダーはファウンドリ (Strategy) に直接連絡し、完成した携帯電話を私に直接発送します (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.phpPHP の戦略パターンについて話しましょう

<?php

interface Message
{
    public function send();
}

class BaiduYunMessage implements Message
{
    function send()
    {
        echo &#39;百度云发送信息!&#39;;
    }
}

class AliYunMessage implements Message
{
    public function send()
    {
        echo &#39;阿里云发送信息!&#39;;
    }
}

class JiguangMessage implements Message
{
    public function send()
    {
        echo &#39;极光发送信息!&#39;;
    }
}

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

パターンに違いはありません
  • 戦略パターンはアルゴリズムを定義します。概念的には、これらのアルゴリズムは同じ作業を完了しますが、実装は異なりますが、物事は終わっています、人々 それは生きています。それをどのように使用したいかは、みんなの関心によって決まります。各アルゴリズムには独自のクラスがあり、独自のインターフェイスを通じて個別にテストできるため、戦略モードでは単体テストを最適化できます
  • 元のアドレス: https://juejin.cn/post/6844903955860996110
著者: ハードコア プロジェクト マネージャー

推奨研究: "

PHP ビデオ チュートリアル

>>

以上がPHP の戦略パターンについて話しましょうの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はjuejin.cnで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。