大话设计模式-策略模式

//Strategy类,定义所有支持的算法的公共接口
abstract class CashSuper {
	//算法方法
	abstract function acceptCash($money);
}

//ConcreteStrategy,封装了具体的算法或行为,继承于Strategy
//正常收费子类
class CashNormal extends CashSuper {

	public function acceptCash($money) {
		return $money;
	}

}

//返利收费子类
class CashReturn extends CashSuper {

	private $moneyCondition = 0;
	private $moneyReturn = 0;
	function __construct($moneyCondition, $moneyReturn) {
		$this->moneyCondition = $moneyCondition;
		$this->moneyReturn = $moneyReturn;
	}

	public function acceptCash($money) {
		$result = $money;
		if($money >= $this->moneyCondition) {
			$result = $money - ($money/$this->moneyCondition) * $this->moneyReturn;
		}
		echo '算法B实现';
	}

}

//折扣收费子类
class CashRebate extends CashSuper {

	private $moneyRebate = 1;
	function __construct($moneyRebate) {
		$this->moneyRebate = $moneyRebate;
	}

	public function acceptCash($money) {
		return $money * $this->moneyRebate;
	}

}



class CashContext {

	//声明一个CashSuper对象
	public $cs;

	//通过构造方法,传入具体的收费策略
	public function cashContext($type) {
		switch($type) {
		case '正常收费':
			$this->cs = new CashNormal();
			break;
		case '满300返100':
			$this->cs = new CashReturn('300','100');
			break;
		case '打8折':
			$this->cs = new CashRebate('0.8');
			break;
		}
	}

	public function getResult($money) {
		return $this->cs->acceptCash($money);
	}
}

$total = 0;//用于总计

$csuper = new CashContext('打8折');
$totalPrices = 0;
$totalPrices = $csuper->getResult(200*3);
echo $totalPrices;


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值