<?php
/**
* 策略模式Strategy(对象行为型)
*/
// 抽象策略类
interface OrderStrategy
{
/**
* 计算订单实付金额
* @param $total_price
* @return mixed
*/
public function actualPay($total_price);
}
// 初级会员折扣 具体策略类
class PrimaryMemberStrategy implements OrderStrategy
{
public function actualPay($total_price)
{
echo '对于初级会员的没有折扣:0', '支付价格:',$total_price,'<br/>';
}
}
// 中级会员折扣
class IntermediateMemberStrategy implements OrderStrategy
{
public function actualPay($total_price)
{
echo '对于中级会员的折扣为:10%','支付价格:',$total_price-($total_price*0.1),'<br/>';
}
}
// 高级会员折扣
class AdvancedMemberStrategy implements OrderStrategy
{
public function actualPay($total_price)
{
echo '对于高级会员的折扣为:20%','支付价格:', $total_price-($total_price*0.2),'<br/>';
}
}
//环境角色类
class Order{
private $price_strategy = null;
public function __construct($price_strategy)
{
$this->price_strategy = $price_strategy;
}
/**
* 计算实付价格
*/
public function actualPay($total_price){
$this->price_strategy->actualPay($total_price);
}
/**
* 实际支付策略
*/
public function setActualPayStrategy($travel){
$this->price_strategy = $travel;
}
}
//客户端
//中级会员计算策略
$strategy1 = new IntermediateMemberStrategy();
$order = new Order($strategy1);
$order->actualPay(100);
//高级会员计算策略
$strategy2 = new AdvancedMemberStrategy();
$order->setActualPayStrategy($strategy2);
$order->actualPay(100);
评论