代理模式:为其他对象提供一种代理以控制对这个对象的访问
使用场合:
(1)远程代理:也就是为一个对象在不同的地址空间提供局部代表。这样可以隐藏一个对象存在于不同地址空间的事实。
(2)虚拟代理:根据需求创建开销很大的对象,通过它来存放实例化需要很长时间的真实对象。
(3)安全代理:用来控制真实对象访问时的权限。
(4)智能指引:是指调用真实的对象时,代理处理另外一些事。
优势:
(1)降低系统耦合度
(2)保护代理可以控制对真实对象的使用权限。
(3)实现代理模式需要额外的工作,有些代理模式的实现 非常复杂。
案例:
1 <?php 2 header("Content-type:text/html;Charset=utf-8"); 3 4 //定义RealSubject和Proxy共同具备的东西 5 interface Subject{ 6 function say(); 7 function run(); 8 } 9 10 class RealSubject implements Subject{ 11 private $name; 12 13 function __construct($name){ 14 $this->name = $name; 15 } 16 17 function say(){ 18 echo $this->name."在吃饭<br>"; 19 } 20 function run(){ 21 echo $this->name."在跑步<br>"; 22 } 23 } 24 class Proxy implements Subject{ 25 private $realSubject = null; 26 function __construct(RealSubject $realSubject = null){ 27 if(empty($realSubject)){ 28 $this->realSubject = new RealSubject(); 29 }else{ 30 $this->realSubject = $realSubject; 31 } 32 } 33 function say(){ 34 $this->realSubject->say(); 35 } 36 function run(){ 37 $this->realSubject->run(); 38 } 39 } 40 41 //测试 42 $subject = new RealSubject("张三"); 43 $proxy = new Proxy($subject); 44 $proxy->say(); 45 $proxy->run(); 46 /* 47 张三在吃饭 48 张三在跑步 49 */ 50 ?>