php设计模式——策略模式

来源:互联网 发布:淘宝2016创业成功案例 编辑:程序博客网 时间:2024/06/06 12:59
/** * 商场活动1,打折优惠收费方式,策略1 */class CashRebate{public $rebate;//打折额度<=1,正常收费情况下等于1 public function setActive($moneyRebate){$this->rebate = $moneyRebate;}//具体实现收取现金方法public function acceptCash($money){return $money * $this->rebate;}}/** * 商场活动2,返现金收费方式,策略2 */class CashReturn{public $moneyCondition;public $moneyReturn;public function setActive($moneyCondition, $moneyReturn){$this->moneyCondition = $moneyCondition;$this->moneyReturn = $moneyReturn;}//实现收费现金方法public function acceptCash($money){if($money >= $this->moneyCondition){return $money - $this->moneyReturn;}else{return $money;}}}/** * 简单工厂模式和策略模式相结合 */class cashContext{public $obj;//工厂模式,生成对应的处理策略对象public function __construct($type){switch ($type) {case 'rebate':$this->obj = new CashRebate();break;case 'return':$this->obj = new CashReturn();break;}}//为各种情况的对象,设置参数public function setRebate($rebate){$this->obj->setActive($rebate);}public function setReturn($ondition, $return){$this->obj->setActive($ondition, $return);}//最终获取实收用户现金的方法public function acceptMoney($money){return $this->obj->acceptCash($money);}}//活动1使用:$totalMoney = 1000; //商品总金额$rebate = 0.8; //活动折扣$cashObj = new cashContext('rebate');$cashObj->setRebate($rebate);$cashObj->acceptMoney($totalMoney);

策略模式是用来封装各种算法的,在实践中可以用策略模式来封装各种业务的规则,减少了各种算法类和使用算法类的耦合
0 0
原创粉丝点击