Home > Backend Development > PHP Tutorial > Example analysis of PHP strategy pattern

Example analysis of PHP strategy pattern

小云云
Release: 2023-03-19 19:44:01
Original
1743 people have browsed it

Overview

The strategy pattern belongs to the behavior pattern of the object. Its intention is to target a set of algorithms and encapsulate each algorithm into an independent class with a common interface so that they can be replaced with each other. The strategy pattern allows the algorithm to change without affecting the client.

This article mainly introduces the definition and usage of PHP strategy pattern to you. It briefly analyzes the principle, implementation and usage of PHP strategy pattern in the form of examples. Friends in need can refer to it. I hope it can help everyone.

UML diagram

Main roles in the strategy pattern

This pattern is designed with three roles:

Environment role (Context): Holds a reference to Strategy
Abstract Strategy (Strategy) role: This is an abstract role, usually implemented by an interface or abstract class. This role gives all the interfaces required by specific strategy classes
Specific strategy (ConcreateStrategy) role: wraps related algorithms or behaviors

Usage scenarios

Suppose you want to design a In the shopping cart system, the simplest case is to multiply the unit price of all goods by the quantity, but the actual situation is definitely more complicated than this. For example: there is no discount for ordinary members, a 20% discount for intermediate members, and a 30% discount for senior members.

According to the above description, the product price is based on one of the following algorithms:

No discount for ordinary members
20% off for intermediate members
7 for senior members Fold

UML diagram

Implementation code:

<?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;
?>
Copy after login

Reviewing the strategy pattern

The focus of the strategy pattern is not how to implement it Algorithms, but how to organize and call these algorithms, so as to make the program structure more flexible, with better scalability and maintainability

Equality of algorithms

A great feature of the strategy model It is the equality of each strategy algorithm. For a series of specific strategy algorithms, everyone has the same status, so that mutual conversion between algorithms can be achieved

Uniqueness of runtime strategy

During running, the strategy mode is in each Only one specific strategy can be used to implement the object at a time. Although you can dynamically switch between different strategy implementations, there is only one

Related recommendations:

Strategy of PHP design patterns Detailed explanation of the pattern

Verification strategy pattern implementation

Detailed explanation of javascript strategy pattern, template pattern usage scenarios and implementation code

The above is the detailed content of Example analysis of PHP strategy pattern. For more information, please follow other related articles on the PHP Chinese website!

Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template