• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

设计模式之代理模式(php实现)

原作者: [db:作者] 来自: [db:来源] 收藏 邀请


github地址:https://github.com/ZQCard/design_pattern

/**
 * 在代理模式中,我们创建具有现有对象的对象,以便向外界提供功能接口。
 *  1、Windows 里面的快捷方式。
 * 2、猪八戒去找高翠兰结果是孙悟空变的,可以这样理解:把高翠兰的外貌抽象出来,高翠兰本人和孙悟空都实现了这个接口,
 * 猪八戒访问高翠兰的时候看不出来这个是孙悟空,所以说孙悟空是高翠兰代理类。
 * 3、买火车票不一定在火车站买,也可以去代售点。
 * 4、一张支票或银行存单是账户中资金的代理。支票在市场交易中用来代替现金,并提供对签发人账号上资金的控制。
 *优点:
 * 1、职责清晰。 2、高扩展性。 3、智能化。
 * 缺点:
 * 1、由于在客户端和真实主题之间增加了代理对象,因此有些类型的代理模式可能会造成请求的处理速度变慢。
 * 2、实现代理模式需要额外的工作,有些代理模式的实现非常复杂。
 * 例子:从服务器读取一张图片的时候,第一次从硬盘读取,将资源对象代理,第二次读取的时候就使用代理对象去读取。
 */

(1)Image.class.php(接口)

<?php

namespace Proxy;

interface Image
{
    public function display();
}

(2)RealImage.class.php

<?php

namespace Proxy;

class RealImage implements Image
{
    private $fileName;

    public function __construct($fileName)
    {
        $this->fileName = $fileName;
        $this->loadFromDisk($fileName);
    }

    public function display()
    {
        print_r("Displaying ". $this->fileName);
        echo '<pre/>';
    }

    private function loadFromDisk($fileName)
    {
        print_r("Loading ". $fileName);
        echo '<pre/>';
    }
}

(3)ProxyImage.class.php(代理类)

<?php

namespace Proxy;

class ProxyImage implements Image
{
    private $realImage;
    private $fileName;

    public function __construct($fileName)
    {
        $this->fileName = $fileName;
    }

    public function display()
    {
        if ($this->realImage == null){
            $this->realImage = new RealImage($this->fileName);
        }
        return $this->realImage->display();
    }
}

(4)proxy.php

<?php

spl_autoload_register(function ($className){
    $className = str_replace('\\','/',$className);
    include $className.".class.php";
});

use Proxy\ProxyImage;

$image = new ProxyImage('a.jpg');
// 图像从磁盘加载
$image->display();
// 图像无法从磁盘加载
$image->display();

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
PHP数组转json格式,key的保存问题发布时间:2022-07-10
下一篇:
PHPRSA加解密示例(转)发布时间:2022-07-10
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap