今天学习一下模板模式。并用它来实现聚合平台支付异步回调的例子。
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();
父类(模板方法)里定义好操作中算法的骨架,具体实现推迟交由子类完成。只需一个抽象类和一个具体类即可。