设计模式之代理模式

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

使用场合:

(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 ?>
原文地址:https://www.cnblogs.com/wawjandcsws/p/10984151.html