php设计模式之策略模式

一,策略模式,是行为设计模式的一种,通过定义不同的策略算法来解决同一个问题。策略模式可以让这些算法在运行时相互替换,而不需要改变客户端的代码。

1,上下文环境类(context):持有一个策略算法的引用,负责在运行时切换算法。

2,抽象策略类(Strategy):定义具体策略类需要实现的方法。

3,具体策略类(Concrete Strategy):实现抽象策略类定义的抽象方法,并实现具体的算法逻辑供环境类调用。

二,例子


// 抽象策略类
interface Member
{
    public function discount($price);
}

// 具体策略类
class PrimaryMember implements Member
{
    public function discount($price)
    {
        echo '普通会员价格:' . $price * 0.9;
    }
}

class SeniorMember implements Member
{
    public function discount($price)
    {
        echo '高级会员价格:' . $price * 0.8;
    }
}

// 环境类
class Product
{
    private $member;

    function __construct(Member $member)
    {
        $this->member = $member;
    }

    public function getPrice($price)
    {
        $this->member->discount($price);
    }
}

// 客户端调用
$obj = new SeniorMember();
$productObj = new Product($obj);
$productObj->getPrice(100);// 高级会员价格:80