概述:
一个类代表另一个类的功能,这种属于结构性设计模式;主要是为其他对象提供一种代理以控制这个对象的访问。
优点:
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();
}
}
$image = new ProxyImage("test_10mb.jpg");
$image->display();
共同学习,写下你的评论
评论加载中...
作者其他优质文章