ホームページ  >  記事  >  バックエンド開発  >  PHP戦略パターン定義と使用例を詳しく解説

PHP戦略パターン定義と使用例を詳しく解説

巴扎黑
巴扎黑オリジナル
2017-09-08 14:55:591240ブラウズ

この記事では主に PHP 戦略パターンの定義と使用法を紹介し、サンプルの形式で PHP 戦略パターンの原理、実装、使用法を簡単に分析します。必要な友人はそれを参照できます

この記事の例では定義について説明します。および PHP 戦略パターンの使用法。参考のために皆さんと共有してください。詳細は次のとおりです:

概要

戦略パターンはオブジェクトの行動パターンに属します。その目的は、アルゴリズムのセットをターゲットにし、各アルゴリズムを共通のインターフェイスを持つ独立したクラスにカプセル化して、相互に置き換えられるようにすることです。戦略パターンでは、クライアントに影響を与えることなくアルゴリズムを変更できます

UML 図

戦略パターンの主な役割

このパターンは 3 つの役割で設計されています:

環境role (Context) : Strategy への参照を保持します
Abstract Strategy (Strategy) role : これは抽象ロールであり、通常はインターフェイスまたは抽象クラスによって実装されます。このロールは、特定の戦略クラスに必要なすべてのインターフェイスを提供します
具体的な戦略 (ConcreateStrategy) ロール: 関連するアルゴリズムまたは動作をパックします

使用シナリオ

今、ショッピング カート システムを設計するとします。最も単純なケースです。すべての商品の単価に数量を乗じることですが、実際の状況はこれよりもはるかに複雑です。例:一般会員は割引なし、中級会員は20%割引、上級会員は30%割引となります。

上記の説明によると、商品価格は以下のアルゴリズムのいずれかに基づいています:

一般会員は割引なし
中級会員は20%オフ
上級会員は30%オフ

UML図

実装コード:


<?php
/**
 * 策略抽象类
 * @author wzy
 *
 */
interface Strategy
{
  public function calPrice ($price);
}
/**
 * 普通会员策略类
 *
 * @author wzy
 *
 */
class PrimaryStrategy implements Strategy
{
  public function calPrice ($price)
  {
    echo "普通会员无折扣";
    return $price;
  }
}
/**
 * 中级会员策略类
 *
 * @author wzy
 *
 */
class MiddleStrategy implements Strategy
{
  public function calPrice ($price)
  {
    echo "中级会员8折优惠";
    return $price * 0.8;
  }
}
/**
 * 高级会员策略类
 *
 * @author wzy
 *
 */
class HighStrategy implements Strategy
{
  public function calPrice ($price)
  {
    echo "高级会员7折优惠";
    return $price * 0.7;
  }
}
/**
 * Context实现类
 *
 * @author wzy
 *
 */
class Price
{
  /**
   * 具体的策略类对象
   *
   * @var object
   */
  private $strategyInstance;
  /**
   * 构造函数,传入一个具体的策略对象
   *
   * @param object $instance
   */
  public function __construct ($instance)
  {
    $this->strategyInstance = $instance;
  }
  /**
   * 计算货品的价格
   *
   * @param double $price
   */
  public function quote ($price)
  {
    return $this->strategyInstance->calPrice($price);
  }
}
/**
 * 客户端操作
 */
$high = new HighStrategy();
$priceClass = new Price($high);
$price = $priceClass->quote(400);
echo $price;
?>

戦略パターンの確認

戦略パターンの焦点は、アルゴリズムを実装する方法ではなく、これらのアルゴリズムをどのように編成して呼び出すかです。プログラム構造がより柔軟で、スケーラビリティとメンテナンスが優れていること

アルゴリズムの平等性

戦略モデルの大きな特徴は、各戦略アルゴリズムが平等であることです。一連の特定の戦略アルゴリズムでは、全員が同じステータスを持つため、アルゴリズム間の相互変換が可能です

実行時戦略の一意性

実行中、戦略モードは各瞬間にのみ使用できます戦略実装オブジェクト。異なる戦略実装間で動​​的に切り替えることができますが、同時に存在するのは 1 つだけです

以上がPHP戦略パターン定義と使用例を詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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