当前位置:首页 > CN2资讯 > 正文内容

设计模式--代理模式

2天前CN2资讯

       Proxy代理模式是一种结构型设计模式,主要解决的问题是:在直接访问对象时带来的问题,比如说:要访问的对象在远程的机器上。在面向对象系统中,有些对象由于某些原因(比如对象创建开销很大,或者某些操作需要安全控制,或者需要进程外的访问),直接访问会给使用者或者系统结构带来很多麻烦,我们可以在访问此对象时加上一个对此对象的访问层。如下图:

   

       比如说C和A不在一个服务器上,A要频繁的调用C,我们可以在A上做一个代理类Proxy,把访问C的工作交给Proxy,这样对于A来说,就好像在直接访问C的对象。在对A的开发中我们可以把注意力完全放在业务的实现上。

       GoF《设计模式》中说道:为其他对象提供一种代理以控制这个对象的访问。

       Proxy模式的结构:
   

       下面通过一个场景来看看Proxy的实现,我们要使用代理类型ProxyClass的对象调用远程机器上的一个类型LongDistanceClass的对象。

    首先我们先模拟一个远程的类型:为了保持对被代理对象使用的透明性,我们使代理类型和被代理类型同时继承同一个接口IProxy

    接口实现:

    interface IProxy

    {

        string Function1();

        string Function2();

    }

    远程对象实现:

    /// <summary>

    /// 模拟的远程对象

    /// </summary>

    public class LongDistanceClass:IProxy

    {

        #region IProxy 成员

        public string Function1()

        {

            //do someting

            return "LongDistanceClass.Function1";

        }

        public string Function2()

        {

            //do someting

            return "LongDistanceClass.Function2";

        }

        #endregion

    }

    接下来就要实现代理类型,使用代理对象访问模拟的远程对象,代理类型实现如下:

    public class ProxyClass:IProxy

    {

        #region IProxy 成员

        public string Function1()

        {

            //to access LongDistanceClass.Function1

            LongDistanceClass obj = new LongDistanceClass();

            return obj.Function1();

        }

        public string Function2()

        {

            //to access LongDistanceClass.Function2

            LongDistanceClass obj = new LongDistanceClass();

            return obj.Function2();

        }

        #endregion

    }

 

    最后实现客户端代码:

    class Class1

    {

        [STAThread]

        static void Main(string[] args)

        {

            IProxy pro = new ProxyClass();

            Console.WriteLine(pro.Function1());

            Console.WriteLine(pro.Function2());

            Console.Read();

        }

    }

    运行结果如下:

    LongDistanceClass.Function1

LongDistanceClass.Function2

       Proxy模式的要点:

       1、“增加一层间接层”是软件系统中对许多负责问题的一种常见解决方法。在面向对象系统中,直接使用某些对象会带来很多问题,作为间接层的proxy对象便是解决这一问题的常用手段。

       在我们日常的工作中也常常用到代理模式,比如对于三层结构或者N- tiers结构中DAL数据访问层,它把对数据库的访问进行封装。BLL业务层的开发者只是调用DAL中的方法来获得数据。

       在比如前一段时间看了看AOP和Remoting方面的资料,对于跨越应用程序域的访问,要为客户应用程序提供一个TransparentProxy(透明代理),客户程序实际上是通过访问这个代理来访问实际的类型对象。

2、具体proxy设计模式的实现方法、实现粒度都相差很大,有些可能对单个对象作细粒度的控制,有些可能对组件模块提供抽象代理层,在架构层次对对象作proxy。

3、proxy并不一定要求保持接口的一致性,只要能够实现间接控制,有时候损及一些透明性是可以接受的。例如上面的那个例子,代理类型ProxyClass和被代理类型LongDistanceClass可以不用继承自同一个接口,正像GoF《设计模式》中说的:为其他对象提供一种代理以控制这个对象的访问。代理类型从某种角度上讲也可以起到控制被代理类型的访问的作用。

    你可能想看:

    扫描二维码推送至手机访问。

    版权声明:本文由皇冠云发布,如需转载请注明出处。

    本文链接:https://www.idchg.com/info/32174.html

    分享给朋友:

    “设计模式--代理模式” 的相关文章

    越南VPS服务全解析:如何选择性价比最高的虚拟服务器

    越南VPS市场近年来发展迅速,吸引了越来越多的用户和投资者。越南的地理位置和互联网基础设施的不断完善,使其成为东南亚地区VPS服务的重要节点。无论是本地企业还是国际用户,越南VPS都提供了多样化的选择。 越南VPS的市场现状 越南VPS市场正处于快速扩展阶段。随着越南互联网普及率的提升和数字化转型的...

    检查自己的IP地址:全面掌握网络安全与故障排查技巧

    检查自己的IP地址的重要性 我常常感受到,了解自己的IP地址是使用互联网时不可或缺的一部分。无论是日常上网还是进行复杂的网络设置,IP地址都扮演着关键角色。所以,搞清楚自己的IP地址,真的非常重要。 那么,什么是IP地址呢?简单来说,IP地址是分配给每台连接到互联网设备的唯一标识符。它就像我们的家庭...

    香港云服务器:灵活选择与网络优势助力企业发展

    香港云服务器作为一种现代化的网络托管服务,逐渐成为越来越多企业和个人用户的首选。这种服务的核心就是将服务器放置在香港的数据中心,提供灵活的云计算资源。对于希望在云端运作的用户来说,了解香港云服务器的定义与特点是非常重要的。 首先,香港云服务器的产品类型多种多样,从轻量云主机到快杰云主机,再到裸金属服...

    提升国际数据传输质量的9929线路分析与应用

    谈到9929线路,首先让我给大家介绍一下AS9929线路的基本情况。这条线路是中国联通为了满足国际市场的需求而推出的一种IP传输服务专线。它的起点在香港,通过海底光缆将中国与亚太及北美地区紧密连接。同时,这条线路还在欧洲和非洲设立了多个重要的网络节点(POP点),这就为跨国数据传输提供了坚实的基础。...

    选择合适的SSH连接工具以提升远程管理效率和安全性

    在当今的网络环境中,SSH连接工具扮演着重要角色。简单来说,SSH连接工具是一种应用程序,用于通过SSH协议安全地连接和管理远程服务器。想想看,当我们需要与服务器进行交互、执行命令或者上传文件时,这些工具就变得尤为重要。 我记得第一次使用SSH连接工具的时候,是为了管理一台远程服务器。能够通过简单的...

    黑五狂欢购物攻略:如何高效享受黑色星期五折扣

    黑五,全称“黑色星期五”(Black Friday),是每年感恩节后的第一天。随着这个节日的到来,许多商店和电商都会推出琳琅满目的促销活动,标志着圣诞购物季的开端。我第一次听到黑五,是在朋友们热火朝天地讨论即将到来的折扣和特卖,这种热情真是难以抗拒。 黑五起源于美国,为什么叫“黑色”呢?这个名字其实...