zoukankan      html  css  js  c++  java
  • (原创)无废话C#设计模式之九:Proxy

     

    无废话C#设计模式之九:Proxy

     

    意图

     

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

     

    场景

     

    代理模式非常常用,大致的思想就是通过为对象加一个代理来降低对象的使用复杂度、或是提升对象使用的友好度、或是提高对象使用的效率。在现实生活中也有很多代理的角色,比如明星的经纪人,他就是一种代理,经纪人为明星处理很多对外的事情,目的是为了节省被代理对象也就是明星的时间。保险代理人帮助投保人办理保险,目的降低投保的复杂度。

    在开发中代理模式也因为目的不同效果各不相同。比如,如果我们的网站程序是通过.NET Remoting来访问帐号服务的。在编写代码的时候可能希望直接引用帐号服务的DLL,直接实例化帐号服务的类型以方便调试。那么,我们可以引入Proxy模式,做一个帐号服务的代理,网站只需要直接调用代理即可。在代理内部实现正式和测试环境的切换,以及封装调用.NET Remoting的工作。

     

    示例代码

     

    using System;

    using System.Collections.Generic;

    using System.Text;

     

    namespace ProxyExample

    {

        class Program

        {

            static void Main(string[] args)

            {

                AccountProxy ap = new AccountProxy();

                ap.Register();

            }

        }

     

        interface IAccount

        {

            void Register();

        }

     

        class Account : IAccount

        {

            public void Register()

            {

                System.Threading.Thread.Sleep(1000);

                Console.WriteLine("Done");

            }

        }

     

        class AccountProxy : IAccount

        {

            readonly bool isDebug = true;

            IAccount account;

            public AccountProxy()

            {

                if (isDebug)

                    account = new Account();

                else

                    account = (IAccount)Activator.GetObject(typeof(IAccount), "uri");

            }

            public void Register()

            {

                Console.WriteLine("Please wait...");

                account.Register();

            }

        }

    }

    代码执行结果如下图:

     

     

    代码说明

     

    l         IAccount就是抽象主题角色。代理对象和被代理对象都遵循这个接口,这样代理对象就能替换被代理对象。

    l         AccountProxy就是代理主题角色。代理主题通常会存在一些逻辑或预处理或后处理操作,不会仅仅是对操作的转发。

    l         Account就是真实主题角色。

     

    何时采用

     

    l         代理模式应用非常广泛,如果你希望降低对象的使用复杂度、或是提升对象使用的友好度、或是提高对象使用的效率都可以考虑代理模式。

     

    实现要点

     

    l         代理对象和被代理对象都遵循一致的接口。

    l         在某些情况下,可以不必保持接口一致性,如果封装确实需要损失一些透明度,那么也可以认为是Proxy

     

    注意事项

     

    l         ProxyFacade以及Adapter可能都是对对象的一层封装,侧重点不同。Proxy基于一致的接口进行封装,Facade针对封装子系统,转化为高层接口,而Adapter的封装是处于适配接口的目的。

  • 相关阅读:
    分段路由的复兴
    动态维护FDB表项实现VXLAN通信
    neutron dhcp 高可用
    wpf
    从0到1设计一台8bit计算机
    哇塞的Docker——vscode远程连接Docker容器进行项目开发(三)
    中通消息平台 Kafka 顺序消费线程模型的实践与优化
    飞机大战 python小项目
    看透确定性,抛弃确定性
    如何根据普通ip地址获取当前地理位置
  • 原文地址:https://www.cnblogs.com/lovecherry/p/917363.html
Copyright © 2011-2022 走看看