PHP戦略パターンの分析例

小云云
小云云オリジナル
2018-02-01 10:20:061747ブラウズ

概要

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

この記事では、PHP 戦略パターンの定義と使用法を主に紹介し、サンプルの形で PHP 戦略パターンの原理、実装、使用法を簡単に分析します。 。

UML 図

戦略パターンの主な役割

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

環境の役割 (コンテキスト): 戦略への参照を保持します
抽象的な戦略 (戦略) の役割: これは抽象化ロール。通常はインターフェイスまたは抽象クラスによって実装されます。このロールは、特定の戦略クラスに必要なすべてのインターフェイスを提供します
特定の戦略 (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 つの特定の戦略のみを使用できますが、実装オブジェクト異なる戦略実装間で動​​的に切り替えることができ、1 つだけあります

関連する推奨事項:

PHP 設計パターンの戦略パターンの詳細な説明

戦略パターン実装の検証

JavaScript 戦略パターン、詳細テンプレートモードの使用シナリオと実装コードの説明

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

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