博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
面向对象编程思想-代理模式
阅读量:5022 次
发布时间:2019-06-12

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

一、引言

在系统开发过程中,大多会遇到跨网络做系统应用间数据对接问题,但目标对象不允许跨网络直接访问数据,通常考虑到网络和安全性能等因素,开发者会在客户端和目标对象间添加一层中间层--代理层,也是即将要介绍的代理模式(Proxy)。

二、代理模式介绍

在介绍代理模式前,我们首先看一下代理模式的分类

1.远程(Remote)代理:为一个位于不同地址空间的对象提供局部代表对象,隐藏一个对象存在于不同地址空间的事实。

典型例子:webservice在.NET中的应用,在应用程序项目中加入web引用,引用一个webservice,会生成WebReference文件夹和一些文件,其实它们就是代理,使得客户端程序调用代理就可以解决远程访问的问题。

2.虚拟(Virtual)代理:根据需要创建开销很大的对象。通过它来存放实例化需要很长时间的真实对象,使得此对象只在需要时才被真正创建。

典型例子:图片延迟加载(ImageLazyLoad),当打开一个很大的HTML网页时,可以看到所有文字,但是图片是一张一张下载后才能看到。未打开的图片框,就是通过虚拟代理替代了真实图片,此时代理存放了真实图片的尺寸和路径。好处是 代理对象可以在必要的时候才将被代理对象加载,加载可以在加载过程加以必要的优化

3.安全(Protection)代理:控制真实对象访问时的权限。一般用于对象应该有不同的访问权限的时候

4.智能引用(Smart Reference)代理:指当调用真实的对象时,代理处理另外一些事。比如将真实对象的引用次数记录下来

5.Copy-on-Write代理:它是虚拟代理的一种,把复制(克隆)操作延迟到只有客户端真正需要时才执行。一般对象的深克隆是一个开销很大的操作,Copy-on-Write代理可以让这个操作延迟,只有对象被用到时才被克隆

 

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

三、代理模式实现

介绍完代理模式的定义,下面用以生活中的例子解释一下代理模式,海外代购,这个场景中代购(ProxyBuyPerson)就是我们(RealBuyPerson)的一个代理,统一公共接口买产品(BuyProduct)

 

//抽象主题角色    public abstract class Person    {        public abstract void BuyProduct();    }    //真实主题角色    class RealBuyPerson : Person    {        public override void BuyProduct()        {            Console.WriteLine($"买一个Iphone和一台苹果电脑");        }    }    //代理角色    class ProxyBuyPerson : Person    {        //引用真实主题实例        RealBuyPerson realPerson;        public override void BuyProduct()        {            if(realPerson==null)            {                realPerson = new RealBuyPerson();            }            this.BeforeBuyProduct();            realPerson.BuyProduct();            this.AfterBuyProduct();        }        private void BeforeBuyProduct()        {            Console.WriteLine($"列个清单,确认要买的东西");        }        private void AfterBuyProduct()        {            Console.WriteLine($"核对清单,确定没有买错");        }    }    class Program    {        static void Main(string[] args)        {            //创建一个代理对象            Person proxy = new ProxyBuyPerson();            proxy.BuyProduct();            Console.Read();        }    }
View Code

优点:

1.代理模式能够将调用与真正被调用的对象隔离,在一定程度上降低了系统耦合度

2.代理对象在客户端和目标对象之间起到一个中介作用,可以对目标对象起到一个保护作用。可以在对目标对象发出请求前做一个额外操作,如权限检查

缺点:

1.由于在客户端和真实主题之间增加了代理对象,因此有些代理模式可能会造成请求的处理速度变慢

2.实现代理类需要额外的工作,从而增加了系统实现复杂度

分析:

代理模式与适配器模式:适配器为它所适配的对象提供一个不同的接口;代理提供了与它的实体相同的接口

代理模式与装饰模式:代理模式在上层接口中定义了主要功能,而代理提供功能控制对象的访问权限;装饰模式在上层接口中定义了部分功能,通过装饰链动态给对象增加职能

 

本文关于代理模式的学习就到这里结束了,设计模式之结构型设计模式(关注对象的组合)的学习也告一段落。

文中如有不足,欢迎斧正,感谢您的阅读。

转载于:https://www.cnblogs.com/jdzhang/p/7340919.html

你可能感兴趣的文章
primefaces p:tableData 显示 List<List>
查看>>
css如何引入外部字体?
查看>>
ARGB_8888
查看>>
quickSort by javascript
查看>>
判断手机旋转代码 屏幕旋转的事件和样式
查看>>
hdu1071算面积问题
查看>>
把一列多行数据合并成一条数据
查看>>
ansible之setup、条件判断、tags、循环handlers
查看>>
数据泵如何生成导出文件的DDL脚本
查看>>
Git/Bitbucket Workflow
查看>>
pygame学习资料
查看>>
6.上传前图片预览
查看>>
腾讯云:搭建 Node.js 环境
查看>>
status 返回当前请求的http状态码
查看>>
Docker基本操作
查看>>
向值栈放数据
查看>>
List集合(有序单列集合)
查看>>
初识跨终端Web
查看>>
CountDownTimer完整具体演示样例
查看>>
ubuntu删除g2o
查看>>