PHP设计模式--代理模式

php中文网
发布: 2016-06-23 13:34:40
原创
1405人浏览过

声明:本系列博客参考资料《大话设计模式》,作者程杰。

        代理模式为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。


        UML类图:

立即学习PHP免费学习笔记(深入)”;

        


       角色介绍:    

       抽象主题角色(IGiveGift):定义了Follower和Proxy公用接口,这样就在任何使用Follower的地方都可以使用Proxy。

       主题角色(Follower):定义了Proxy所代表的真实实体。

       代理对象(Proxy):保存一个引用使得代理可以访问实体,并提供一个与Follower接口相同的接口,这样代理可以用来代替实体(Follower)。


      代码实现:

     

比格设计
比格设计

比格设计是135编辑器旗下一款一站式、多场景、智能化的在线图片编辑器

比格设计 124
查看详情 比格设计
<?php/** * Created by PhpStorm. * User: LYL * Date: 2015/5/16 * Time: 16:33 *//**顶层接口 * Interface IGiveGift */interface IGiveGift{    function giveRose();    function giveChocolate();}/**追求者 * Class Follower */class Follower implements IGiveGift{    private $girlName;    function __construct($name='Girl')    {        $this->girlName=$name;    }    function giveRose()    {        echo "{$this->girlName}:这是我送你的玫瑰,望你能喜欢。<br/>";    }    function giveChocolate()    {        echo "{$this->girlName}:这是我送你的巧克力,望你能收下。<br/>";    }}/**代理 * Class Proxy */class Proxy implements IGiveGift{    private $follower;    function __construct($name='Girl')    {        $this->follower=new Follower($name);    }    function giveRose()    {        $this->follower->giveRose();    }    function giveChocolate()    {        $this->follower->giveChocolate();    }}
登录后复制

        客户端代码:

       

header("Content-Type:text/html;charset=utf-8");//------------------------代理模式测试代码------------------require_once "./Proxy/Proxy.php";$proxy=new Proxy('范冰冰');$proxy->giveRose();$proxy->giveChocolate();
登录后复制

       优点:   

       1、职责清晰

        真实的角色就是实现实际的业务逻辑,不用关心其他非本职责的事务,通过后期的代理完成一件完成事务,附带的结果就是编程简洁清晰。

        2、代理对象可以在客户端和目标对象之间起到中介的作用,这样起到了中介和保护了目标对象的作用。

        3、高扩展性

       适用场景:

      1) 远程代理(Remote  Proxy)为一个位于不同的地址空间的对象提供一个本地的代理对象。

        这个不同的地址空间可以是在同一台主机中,也可是在另一台主机中,远程代理又叫做大使(Ambassador)
      2) 虚拟代理(Virtual Proxy)根据需要创建开销很大的对象。

         如果需要创建一个资源消耗较大的对象,先创建一个消耗相对较小的对象来表示,真实对象只在需要时才会被真正创建。 
      3) 保护代理(Protection Proxy)控制对原始对象的访问。

           保护代理用于对象应该有不同的访问权限的时候。
      4) 智能指引(Smart Reference)取代了简单的指针,它在访问对象时执行一些附加操作。
      5) Copy-on-Write代理:它是虚拟代理的一种,把复制(克隆)操作延迟到只有在客户端真正需要时才执行。

一般来说,对象的深克隆是一个开销较大的操作,Copy-on-Write代理可以让这个操作延迟,只有对象被用到的时候才被克隆。

PHP面向对象设计模式
PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号