代理就是帮别人代干某事。例如,我每个月都要去银行交一次水费。
interface Payable
{
public function pay($amount);
}
class MyAccount implements Payable
{
public function pay($amount)
{
echo "交水费";
}
}
后来,同事告诉我,现在都不用到银行交消费了,通过支付宝就可以了(即支付宝也必须实现pay())。于是我把我的银行帐号与支付宝绑定.
class AlipayAccount implements Payable
{
//我的银行帐户
protected $_myBankAccount;
public function __construct($account)
{
$this->_myBankAccount = $account;
}
public function pay($amount)
{
$this->_myBankAccount->pay();
}
}
这样我以后交水费都不用往银行跑,直接用支付宝交钱就可以了。这就是代理模式,即我通过支付宝来支付我的水费。这样我还觉得麻烦,那支付宝又提供了一个功能就是每月定时交水费。支付宝每月会到自来水公司查询系统查询到我当月的水费交缴数额。然后每月自动交费。这功能太好了。那我就可以完全解脱出来了。
class AlipayAccount implements Payable
{
//我的银行帐户
protected $_myBankAccount;
public function __construct($account)
{
$this->_myBankAccount = $account;
}
//每月自动支付
public function payEveryMonth()
{
//代码略
}
//获取本月水费额
public function getAmount()
{
//代码略
}
//支付
public function pay($amount)
{
$this->_myBankAccount->pay();
}
}
这样看来,代理模式可以在不用修改原代码功能的基础上,可以添加新功能。并且能从复杂的逻辑中解脱出来。这就是它的优点。