`
jtlyuan
  • 浏览: 66779 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

代理模式---proxy

 
阅读更多

代理(Proxy)模式给某一个对象提供一个代理,并由代理对象控制对原对象的引用。

为其它对象提供一种代理以控制对目标对象的访问。即第三方对象通过访问代理对象而达到访问目标对象之目的,与此同时,代理对象在访问目标对象前后加入特定的逻辑以实现功能的扩展



  

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

 

 

代理模式和装饰者模式上在语法形式上几乎完全一样,那么它们的区别在哪里呢?
装饰者模式:动态地给一个对象添加一些额外的职责。就增加功能来说,装饰模式相比生成子类更加灵活
代理模式:为其它对象提供一种代理以控制对这个对象的访问。

其实,它们的着重点一个在于“增加”职责,另一个在于“控制”访问。这是它们最本质的区别。

由此可以看到:学习设计模式重点在于“语义”上把握,而不是追求它的“形式。

  • 大小: 39.6 KB
分享到:
评论

相关推荐

    apache开源项目源码commons-proxy-1.0-src(全部高质量代理模式proxy的java源程序)

    全部高质量代理模式proxy的java源程序 java.proxy,代理模式源码,设计模式,apache开源项目源码commons-proxy-1.0-src 各种代理模式操作的工具类源码以及代理模式案例源码,你会从中得到意想不到的效果! apache...

    Proxy-SwitchyOmega-Chromium-2.5.15.zip

    Proxy-SwitchyOmega是一款强大的网络代理管理插件,专为Chromium浏览器(Chromium是Google Chrome浏览器的基础开源版本)设计。这款插件允许用户在不同的网络环境之间快速切换,包括HTTP、HTTPS、SOCKS4、SOCKS5等...

    设计模式专题之(六)代理模式---设计模式代理模式示例代码(python--c++)

    代理模式是一种常用的设计模式,它在软件开发中扮演着重要角色,主要用来为其他对象提供一种代理以控制对这个对象的访问。在这个专题中,我们将深入探讨代理模式,并通过Python和C++两种语言来实现示例代码。 首先...

    kubernetes 使用cilium 网络插件 替换kube-proxy

    在Kubernetes环境中,传统的服务发现和网络代理方案是通过kube-proxy来实现的,它提供了iptables、ipvs等不同的工作模式。然而,随着云原生应用的发展,对网络性能、安全性和可观测性的需求日益增强,这催生了Cilium...

    rack-reverse-proxy, rack的反向代理.zip

    反向代理是一种网络架构模式,它位于客户端和服务器之间,接收来自客户端的请求并将其转发给适当的后端服务器。反向代理的主要作用包括负载均衡、安全防护、性能优化等。在Rack的环境中,rack-reverse-proxy扮演的...

    代理模式 proxy-learn.rar

    在`proxy-learn`这个压缩包中,应该包含了这两种代理模式的详细示例代码,供初学者参考学习。对于初学者来说,理解并掌握代理模式是提升编程能力的重要步骤,它能帮助我们更好地理解和应用面向对象设计原则。

    charles-proxy-4.6.4-win64安装包

    这个“charles-proxy-4.6.4-win64”安装包是专为 Windows 64 位系统设计的最新版本,用于帮助用户捕获、查看并分析网络数据,以便于调试和优化应用程序的网络通信。 **一、Charles 的主要功能** 1. **HTTP/HTTPS ...

    设计模式C++学习之代理模式(Proxy)

    proxy-&gt;request(); delete proxy; return 0; } ``` 在这个例子中,`Subject`是主题接口,`RealSubject`是实现了接口的真实对象,`Proxy`是代理对象,它持有一个`RealSubject`的实例并实现了相同的接口。在`...

    Proxy-SwitchyOmega_v2.5.21.zip

    Proxy-SwitchyOmega是一款针对Chrome浏览器的扩展程序,主要用于网络代理管理和IP地址切换。这款插件对于需要频繁更换网络环境的用户,如开发者、网络测试人员或者需要访问不同地区服务的用户来说,非常实用。它允许...

    Proxy SwitchOmega 2.5.15 Chrome离线插件(谷歌浏览器proxy插件)

    Google Chrome插件: Proxy ...2. 拖拽Proxy-SwitchyOmega_2_5_15_0.crx到扩展管理界面 3. 安装 原始安装路径: https://chrome.google.com/webstore/detail/proxy-switchyomega/padekgcemlokbadohgkifijomclgjgif?hl=en

    php-proxy:简单PHP代理脚本

    发出针对此脚本的cURL请求添加具有身份验证密钥的Proxy-Auth标头添加具有代理请求的URL的Proxy-Target-URL标头(可选)为调试模式添加Proxy-Debug标头为了保护未授权用户使用代理,请考虑在和所有请求中更改Proxy-...

    代理模式-静态动态代理-jdk动态代理-cglib动态代理

    代理模式是一种设计模式,它允许我们在不修改原有对象的情况下,为对象添加新的功能或行为。在Java中,代理模式有多种实现方式,包括静态代理、JDK动态代理和CGLIB动态代理。 **静态代理** 静态代理是最早也是最...

    设计模式-代理模式-java

    代理模式是一种常用的设计模式,它在软件开发中起到了中介或者代表的作用,允许我们为其他对象提供一种代理以控制对这个对象的访问。在Java中,代理模式可以通过多种方式实现,包括静态代理、动态代理(JDK动态代理...

    设计模式之代理模式proxy

    **设计模式之代理模式(Proxy Pattern)** 设计模式是软件工程中的一种最佳实践,它是在特定情境下解决常见问题的模板。代理模式是其中一种行为设计模式,它的核心思想是为一个对象提供一个替身或者代理,以控制对...

    设计模式--代理模式

    代理模式的基本结构包括三个主要角色:真实主题(RealSubject)、代理(Proxy)和客户端(Client)。真实主题是代理所代表的对象,它实现了与客户端交互所需的接口。代理类则实现了相同的接口,但其内部包含了一个...

    Java设计模式-代理模式例子

    在这个“Java设计模式-代理模式例子”中,我们可能能看到如何创建静态代理类,以及如何利用`Proxy`和`InvocationHandler`创建动态代理。源码分析可以帮助我们更好地理解代理模式的实现细节,并能将其运用到自己的...

    2 代理模式-MOOC课程内容.pdf

    代理模式是软件设计中的一种行为型模式,属于结构型模式的范畴。它是为了控制对一个对象的访问,从而提供一个代理或者占位符来代替原始对象。该模式的主要目的是为其他对象提供一种代理以控制对这个对象的访问。 ...

    设计模式之代理模式proxy.zip

    代理模式是一种常用的设计模式,它在软件开发中扮演着重要的角色。代理模式允许我们为一个对象创建一个代理,这个代理对象在客户端和目标对象之间起到中介的作用,可以增强或控制对目标对象的访问。代理模式的主要...

    dnscrypt-proxy - 支持加密的DNS协议代理.zip

    这个压缩包文件“dnscrypt-proxy - 支持加密的DNS协议代理.zip”包含了一个名为“dnscrypt-proxy-master”的项目,它是DNSCrypt代理服务的实现,旨在提供加密的DNS查询服务,确保用户的DNS请求在传输过程中不被篡改...

Global site tag (gtag.js) - Google Analytics