策略模式

/**
* 目前课程分为演讲 和研讨。
* 收费有固定收费 和按照时间收费
* 使用策略模式来解决收费 和 收费项目
*/

/**
* lesson
* abstract
*/
class Lesson{
private $duration;
private $costStrategy;
function __construct( $duration, CostStrategy $costStrategy ) {
$this->duration = $duration;
$this->costStrategy = $costStrategy;
}
/*cost 委托给CostStrategy对象计算*/
function cost() {
return $this->costStrategy->cost( $this );
}
/*chargeType 委托给CostStrategy对象计算*/
function chargeType() {
return $this->costStrategy->chargeType( );
}
function getDuration() {
return $this->duration;
}
}

abstract class CostStrategy {
abstract function cost( Lesson $lesson );
abstract function chargeType();
}
class TimeCostStrategy extends CostStrategy {
function cost( Lesson $lesson ) {
return ( $lesson->getDuration() * 5 );
}
function chargetype() {
return 'hourly';
}
}
class fixedCostStrategy extends CostStrategy {
function cost( Lesson $lesson ) {
return 30;
}
function chargeType() {
return 'fixed';
}

}
/*打折项目*/
class discountCostStrategy extends CostStrategy {
private $discount;
private $costStrategy;
function __construct( CostStrategy $costStrategy, $discount ) {
$this->discount = $discount;
$this->costStrategy = $costStrategy;
}
function cost( Lesson $lesson ){
return $this->costStrategy->cost( $lesson ) / ( $this->discount * 10 );
}
function chargeType() {
return $this->costStrategy->chargeType();
}
}
$lesson = new Lesson( '4', new discountCostStrategy( new fixedCostStrategy(), 7 ) );
var_dump( $lesson );
echo $lesson->cost(), $lesson->chargeType();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值