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; ?>
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
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!