PHP 设计模式之策略模式
2021-03-17 16:25
标签:一个 源代码 类型 语句 根据 div method 功能 系统 策略模式(Strategy Pattern)作为一种软件设计模式,指对象有某个行为,但是在不同的场景中,该行为有不同的实现算法。 策略模式是一种对象行为型模式。 策略模式包含如下角色:
‘ 订单系统中不同类型的客户有不同的结算方式; 替换继承关系,避免使用多重条件转移语句,扩展性良好 客户端必须知道所有策略类,并自行决定使用哪一种策略类。 输出: 原文链接:https://www.ryanzoe.top/%e8%ae%be%e8%ae%a1%e6%a8%a1%e5%bc%8f/php-strategy-mode/ PHP 设计模式之策略模式 标签:一个 源代码 类型 语句 根据 div method 功能 系统 原文地址:https://www.cnblogs.com/ryanzheng/p/12784365.html简单描述
比如每个人都要“交个人所得税”,但是“在美国交个人所得税”和“在中国交个人所得税”就有不同的算税方法。模式结构
模式动机
使用场景
不同商家的打折优惠模式不同;优点
缺点
如果算法较多,则会造成很多的策略类。实例
php
// 策略接口
interface IStrategy{
public function algorithMethod();
}
// 具体策略实现
class ConcreteStrategy implements IStrategy{
public function algorithMethod(){
echo "this is ConcreteStrategy method...
";
}
}
class ConcreteStrategy2 implements IStrategy{
public function algorithMethod(){
echo "this is ConcreteStrategy2 method...
";
}
}
class ConcreteStrategy3 implements IStrategy{
public function algorithMethod(){
echo "this is ConcreteStrategy3 method...
";
}
}
// 策略上下文
class StrategyContext{
public $strategy = null;
// 使用构造器注入具体的策略类
public function __construct(IStrategy $strategy){
$this->strategy = $strategy;
}
public function contextMethod(){
// 调用策略实现的方法
$this->strategy->algorithMethod();
}
}
// 客户端调用
// 1. 创建具体策略实现
$strategy = new ConcreteStrategy2();
// 2. 创建策略上下文的同时,将具体的策略实现对象注入到策略上下文中
$ctx = new StrategyContext($strategy);
// 3. 调用上下文对象的方法来完成对具体策略实现的回调
$ctx->contextMethod();
this is ConcreteStrategy2 method…
上一篇:js:堆栈和队列
下一篇:记一次Ajax请求MVC调优