原文:http://www.runoob.com/design-pattern/proxy-pattern.html
概述:
一個類代表另一個類的功能,這種屬於結構性設計模式;主要是爲其他對象提供一種代理以控制這個對象的訪問。
優點:
1、職責清晰。
2、高擴展性。
3、智能化。
缺點:
1、由於在客戶端和真實主題之間增加了代理對象,因此有些類型的代理模式可能會造成請求的處理速度變慢。
2、實現代理模式需要額外的工作,有些代理模式的實現非常複雜。
使用場景:
按職責來劃分,通常有以下使用場景:
1、遠程代理。
2、虛擬代理。
3、Copy-on-Write 代理。
4、保護(Protect or Access)代理。
5、Cache代理。
6、防火牆(Firewall)代理。
7、同步化(Synchronization)代理。
8、智能引用(Smart Reference)代理。
注意事項:
1、和適配器模式的區別:適配器模式主要改變所考慮對象的接口,而代理模式不能改變所代理類的接口。
2、和裝飾器模式的區別:裝飾器模式爲了增強功能,而代理模式是爲了加以控制。
代碼示例:
<?php
interface Image{
public function display();
}
class RealImage implements Image {
private $fileName;
public function RealImage($fileName){
$this->fileName = fileName;
$this->loadFromDisk($this->fileName);
}
public function display() {
echo "Displaying " . $this->fileName;
}
private function loadFromDisk( $fileName){
echo "Loading " . $this->fileName;
}
}
class ProxyImage implements Image{
private realImage = null;
private $fileName;
public function ProxyImage( $fileName){
$this->fileName = $fileName;
}
public function display() {
if($this->realImage == null){
$this->realImage = new RealImage($this->fileName);
}
$this->realImage->display();
}
}
$p_w_picpath = new ProxyImage("test_10mb.jpg");
$p_w_picpath->display();