//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;
大话设计模式-策略模式
最新推荐文章于 2024-04-17 21:18:57 发布