博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
设计模式之六:代理模式
阅读量:4147 次
发布时间:2019-05-25

本文共 1621 字,大约阅读时间需要 5 分钟。

设计模式之六:代理模式
http://www.taidous.com/thread-49559-1-1.html

(出处: 【泰斗社区】-专注互联网游戏和应用的开发者平台)

代理模式(Proxy Pattern)又称委托模式:
       定义:Provide a surrogate or placeholder for another object to control access to it.(为其他对象提供一种代理以控制对这个对象的访问)。

        优点:
        1、职责清晰:真实的角色就是实现实际的业务逻辑,不用关心其他非本职责的事务,通过后期的代理完成一件事务,附带的结果就是编程简洁清晰;
        2、高扩展性:具体主题角色是随时都会发生变化的,只要它实现了接口,甭管它如何变化,我们的代理类完全就可以在不做任何修改的情况下使用;
        3、智能化
        通用代码结构如下:
///     /// 抽象主题类    ///     public interface Subject    {        public void request();    }    ///     /// 真实主题类    ///     public class RealSubject : Subject    {        public void request()        {            //业务逻辑处理        }    }    ///     /// 代理类    ///     public class Proxy : Subject    {        //要代理那个实现类        private Subject subject = null;        //默认被代理者        public Proxy()        {            this.subject = new Proxy();        }        //通过构造函数传递代理者        public Proxy(Object  objects)        {        }        //实现接口中定义的方法        public void request()        {            this.before();            this.subject.request();            this.after();        }        //预处理        private void before()        {        }        //善后处理        private void after()        {        }    }

   在实际开发过程中,代理类的实现比上述代码要复杂很多,代理模式根据其目的和实现方式不同可分为很多种类,其中常用的几种代理模式简要说明如下:

       (1) 远程代理(Remote Proxy):为一个位于不同的地址空间的对象提供一个本地的代理对象,这个不同的地址空间可以是在同一台主机中,也可是在另一台主机中,远程代理又称为大使(Ambassador)。

       (2) 虚拟代理(Virtual Proxy):如果需要创建一个资源消耗较大的对象,先创建一个消耗相对较小的对象来表示,真实对象只在需要时才会被真正创建。

       (3) 保护代理(Protect Proxy):控制对一个对象的访问,可以给不同的用户提供不同级别的使用权限。

       (4) 缓冲代理(Cache Proxy):为某一个目标操作的结果提供临时的存储空间,以便多个客户端可以共享这些结果。

       (5) 智能引用代理(Smart Reference Proxy):当一个对象被引用时,提供一些额外的操作,例如将对象被调用的次数记录下来等。

你可能感兴趣的文章
Android使用webservice客户端实例
查看>>
[转]C语言printf
查看>>
C 语言学习 --设置文本框内容及进制转换
查看>>
C 语言 学习---判断文本框取得的数是否是整数
查看>>
C 语言 学习---ComboBox相关、简单计算器
查看>>
C 语言 学习---ComboBox相关、简易“假”管理系统
查看>>
C 语言 学习---回调、时间定时更新程序
查看>>
C 语言 学习---复选框及列表框的使用
查看>>
第十一章 - 直接内存
查看>>
JDBC核心技术 - 上篇
查看>>
一篇搞懂Java反射机制
查看>>
Single Number II --出现一次的数(重)
查看>>
Palindrome Partitioning --回文切割 深搜(重重)
查看>>
对话周鸿袆:从程序员创业谈起
查看>>
Mysql中下划线问题
查看>>
Xcode 11 报错,提示libstdc++.6 缺失,解决方案
查看>>
idea的安装以及简单使用
查看>>
Windows mysql 安装
查看>>
python循环语句与C语言的区别
查看>>
vue 项目中图片选择路径位置static 或 assets区别
查看>>