This article mainly introduces the definition and usage of PHP strategy pattern, and briefly analyzes the principle, implementation and usage of PHP strategy pattern in the form of examples. Friends in need can refer to it
The details are as follows:
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
UML diagram
Main roles in strategy mode
This mode is designed with three roles:
Environment role (Context): Persistence There is 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
Used Scenario
Suppose you want to design a shopping cart system now. 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; ?>
Reviewing the Strategy Pattern
The focus of the Strategy Pattern is not how to implement the algorithm, But how to organize and call these algorithms so that the program structure is more flexible and has better scalability and maintainabilityEquality of algorithms
A great feature of the strategy model 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 achievedUniqueness of runtime strategies
During operation, the strategy mode can only use one specific strategy implementation object at each moment. Although it can dynamically switch between different strategy implementations, there is only one## at the same time. #Related recommendations:
Using PHPStrategy ModeUsage Detailed Explanation
Example analysis PHP
The above is the detailed content of PHP strategy pattern definition and usage (detailed explanation). For more information, please follow other related articles on the PHP Chinese website!