您的位置:首页 > 编程语言 > PHP开发

php设计模式——策略模式

2015-01-15 12:55 633 查看
/**
* 商场活动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);


策略模式是用来封装各种算法的,在实践中可以用策略模式来封装各种业务的规则,减少了各种算法类和使用算法类的耦合
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: