标签:一个 源代码 类型 语句 根据 div method 功能 系统
策略模式(Strategy Pattern)作为一种软件设计模式,指对象有某个行为,但是在不同的场景中,该行为有不同的实现算法。
比如每个人都要“交个人所得税”,但是“在美国交个人所得税”和“在中国交个人所得税”就有不同的算税方法。
策略模式是一种对象行为型模式。
策略模式包含如下角色:
订单系统中不同类型的客户有不同的结算方式;
不同商家的打折优惠模式不同;
替换继承关系,避免使用多重条件转移语句,扩展性良好
客户端必须知道所有策略类,并自行决定使用哪一种策略类。
如果算法较多,则会造成很多的策略类。
<?php // 策略接口 interface IStrategy{ public function algorithMethod(); } // 具体策略实现 class ConcreteStrategy implements IStrategy{ public function algorithMethod(){ echo "this is ConcreteStrategy method...<br>"; } } class ConcreteStrategy2 implements IStrategy{ public function algorithMethod(){ echo "this is ConcreteStrategy2 method...<br>"; } } class ConcreteStrategy3 implements IStrategy{ public function algorithMethod(){ echo "this is ConcreteStrategy3 method...<br>"; } } // 策略上下文 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…
原文链接:https://www.ryanzoe.top/%e8%ae%be%e8%ae%a1%e6%a8%a1%e5%bc%8f/php-strategy-mode/
标签:一个 源代码 类型 语句 根据 div method 功能 系统
原文地址:https://www.cnblogs.com/ryanzheng/p/12784365.html