代理模式:为其他对象提供一种代理以控制对这个对象的访问。

 

代理模式中主要角色

抽象主题角色:声明了代理主题和真实主题的公共接口,使任何需要真实主题的地方都能用代理主题代替。

代理主题角色:含有真实主题的引用,从而可以在任何时候操作真实主题,代理主题功过提供和真实主题相同的接口,使它可以随时代替真实主题。代理主题通过持有真实主题的引用,不但可以控制真实主题的创建或删除,可以在真实主题被调用前进行拦截,或在调用后进行某些操作。

真实代理对象:定义了代理角色所代表的具体对象。

interface Person{
    public function playGame();
    public function kill();
}
 
class Gaoshou implements Person {           # 代理主题角色
 
    public function playGame(){
        echo "我是王者<br/>";
    }
 
    public function kill(){
        echo "penta kill<br/>";
    }
}
 
 
class Proxy  implements Person {              # 代理
    protected $obj;
 
    public function __construct(Person $obj)
    {
        $this->obj = $obj;
    }
 
    public function playGame()
    {
        $this->obj->playGame();
    }
 
    public function kill()
    {
        $this->obj->kill();
    }
}
 
$obj = new Proxy(new Gaoshou());
$obj->playGame();
$obj->kill();


我是王者输出:

penta kill