策略模式:
定义一系列算法,将每一个算法封装起来,并让他们可以相互替换。
角色分析
抽象策略角色: 策略类,通常有一个接口或者抽象类
具体策略角色: 包装了相关的算法和行为
环境角色: 持有一个策略类的引用,给客户端调用。
<?php
abstract class PayStrategy
{
abstract function pay();
}
class AliPay extends PayStrategy
{
public function pay()
{
echo "使用支付宝完成支付";
}
}
class WechatPay extends PayStrategy
{
public function pay()
{
echo "使用微信完成支付";
}
}
class UnionPay extends PayStrategy
{
public function pay()
{
echo "使用银联完成支付";
}
}
class Context
{
private $strategy;
public function __construct(PayStrategy $strategy)
{
$this->strategy = $strategy;
}
public function payOrder()
{
$strategy = get_class($this->strategy);
switch ($strategy) {
case 'AliPay':
$pay = new AliPay();
break;
case 'WechatPay':
$pay = new WechatPay();
break;
case 'UnionPay':
$pay = new UnionPay();
break;
}
$pay->pay();
}
}
$pay = new Context(new WechatPay());
$pay->payOrder();