zoukankan      html  css  js  c++  java
  • 代理模式

    代理模式控制着对原对象的访问,并允许在将请求提交给对象前后进行一些处理

    代码示例

    <?php
    
    interface subject
    {
        public function request();
    }
    
    //原服务
    class realSubject implements subject
    {
        public function request()
        {
            echo 'realSubject handle request';
        }
    }
    
    class proxy implements subject
    {
        //申明成员变量,用来存储引用对象
        private $realSubject;
    
        public function __construct(realSubject $realSubject)
        {
            $this->realSubject = $realSubject;
        }
    
        //将请求提交给原对象前后做一些处理
        public function request()
        {
            if ($this->checkAccess()){
                $this->realSubject->request();
                $this->logAccess();
            }
        }
        
        private function checkAccess()
        {
            echo 'proxy check access';
            
            return true;
        }
        
        private function logAccess()
        {
            echo 'proxy log access';
        }
    }
    
    //客户端调用
    $realSubject = new realSubject();
    $realSubject->request();    // realSubject handle request
    
    $proxy = new proxy($realSubject);
    $proxy->request();  //1、proxy check access 2、realSubject handle request 3、proxy log access

    从示例中可以明显看出,在将请求交给原对象之前,做了 check 操作,请求完了之后,又做了 log 操作。当然,这只是最简单的应用,围绕这一设计,后续可以做一些更加复杂的场景。

    适用场景

    - 延迟初始化(虚拟代理):对于一个并不常用并且重量级的服务对象,不必要在程序开始就创建该对象,可以将对象的初始化延迟到真正需要的时候。

    - 访问控制(保护代理):对于一些重要的服务对象,在调用之前可以针对性的做一些必要的安全校验。

    - 记录日志请求(日志记录代理):代理可以在向服务传递请求前进行日志记录和处理结果的记录。

    - 缓存请求结果(缓存代理):将请求结果缓存,避免多次请求。

    - 智能引用:没有客户端适用某重量级对象时立即销毁该对象。

  • 相关阅读:
    Microsoft To-Do无法同步问题 ke xue上网导致
    学习希尔排序
    查找docker无法启动的原因
    挂载只读分区为可读写
    批量重建索引脚本
    frp nginx 80 端口共用
    vue部署nginx 404
    阿里云服务器,数据库热备、暖备、冷备实战-镜像篇(域环境下配置)
    码农老婆的网店
    Wcf调用方式
  • 原文地址:https://www.cnblogs.com/suojian/p/14009961.html
Copyright © 2011-2022 走看看