PHP 实现模板模式

271 阅读1分钟

今天学习一下模板模式。并用它来实现聚合平台支付异步回调的例子。

abstract class ThirdPayAsyncCallbackTemplate
{
    public function asyncCallback()
    {
        $this->verifySignature();
        $this->payLog();
        $this->asyncService();
    }

    public abstract function verifySignature();
    public abstract function asyncService();
    public abstract function resultSuccess();
    public abstract function resultFail();
    public function payLog()
    {
        echo "写支付日志";
    }

}

class AliPayCallback extends ThirdPayAsyncCallbackTemplate
{
    public function verifySignature()
    {
        echo "验证支付宝支付签名";
    }

    public function payLog()
    {
        parent::payLog(); // TODO: Change the autogenerated stub
    }

    public function asyncService()
    {
        echo "改变支付宝订单状态入库";
    }

    public function resultSuccess()
    {
        return "success";
    }

    public function resultFail()
    {
        return "fail";
    }
}

class WechatPayCallback extends ThirdPayAsyncCallbackTemplate
{
    public function verifySignature()
    {
        echo "微信支付验签";
        if(验签失败)
            $this->resultFail();
    }

    public function payLog()
    {
        parent::payLog(); // TODO: Change the autogenerated stub
    }

    public function asyncService()
    {
        echo "微信支付订单入库";
        return $this->resultSuccess();
    }

    public function resultSuccess()
    {
        return "success";
    }

    public function resultFail()
    {
        return "fail";
    }
}

$ali = new AliPayCallback();
$ali->asyncCallback();
$wx = new WechatPayCallback();
$wx->asyncCallback();

父类(模板方法)里定义好操作中算法的骨架,具体实现推迟交由子类完成。只需一个抽象类和一个具体类即可。