什么叫策略模式? 定义了一系列的算法,并将每一个算法分别封装起来,而且使它们之间可以相互替换 商场促销 <?php class Context { private $cs; public function __construct(Strategy $strategy) { $this->cs=$strategy; } public function create($money) { return $this->cs->get_result($money); } } abstract class Strategy { abstract function get_result($money); } /** * 现金类 */ class StrategyA extends Strategy { public function get_result($money) { return $money; } } /** * 打折类 */ class StrategyB extends Strategy { private $sale; public function __construct($sale=1) { $this->sale=$sale; } public function get_result($money) { return $money*$this->sale; } } /** * 满300返50类 */ class StrategyC extends Strategy { private $money1; private $money2; public function __construct($money1,$money2) { $this->money1=$money1; $this->money2=$money2; } public function get_result($money) { if($money>$money1) { $money = $money-floor($money/$this->money1)*$this->money2; } return $money; } } //直接给现金 $context = new Context(new StrategyA()); echo $context->create(100); echo "/n"; //打折给现金 $context = new Context(new StrategyB(0.8)); echo $context->create(100); echo "/n"; //满300返50类 $context = new Context(new StrategyC(300,50)); echo $context->create(500); 结果10080450