美文网首页
C#设计模式八:Proxy(含实例源码)

C#设计模式八:Proxy(含实例源码)

作者: GoodTekken | 来源:发表于2020-12-14 08:38 被阅读0次

主程序

        static void Main(string[] args)
        {
            AccountProxy ap = new AccountProxy();
            ap.Register();

            Console.ReadKey();
        }
    }

AccountProxy类

    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();
        }
    }

IAccount接口

    interface IAccount
    {
        void Register();
    }

Account类

    class Account:IAccount
    {
        public void Register()
        {
            System.Threading.Thread.Sleep(1000);
            Console.WriteLine("Done");
        }
    }

意图

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

场景

代理模式非常常用, 大致的思想就是通过为对象加一个代理来降低对象的使用复杂度、 或是提升对象使用的友好度、或是提高对象使用的效率。
在现实生活中也有很多代理的角色,比如明星的经纪人,他就是一种代理,经纪人为明星处理很多对外的事情,目的是为了节省被代理对象也就是明星的时间。
保险代理人帮助投保人办理保险,目的降低投保的复杂度。在开发中代理模式也因为目的不同效果各不相同。
比如,如果我们的网站程序是通过.NET Remoting 来访问帐号服务的。在编写代码的时候可能希望直接引用帐号服务的DLL,直接实例化帐号服务的类型以方便调试。
那么,我们可以引入Proxy模式,做一个帐号服务的代理,网站只需要直接调用代理即可。在代理内部实现正式和测试环境的切换,以及封装调用.NET Remoting的工作。

代码说明

  • IAccount就是抽象主题角色。代理对象和被代理对象都遵循这个接口,这样代理对象就能替换被代理对象。
  • AccountProxy就是代理主题角色。代理主题通常会存在一些逻辑或预处理或后处理操作,不会仅仅是对操作的转发。
  • Account就是真实主题角色。

何时采用

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

实现要点

  • 代理对象和被代理对象都遵循一致的接口。
  • 在某些情况下,可以不必保持接口一致性,如果封装确实需要损失一些透明度,那么也可以认为是Proxy。

注意事项

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

C#设计模式一:Singleton(含实例源码)
C#设计模式二:AbstractFactory(含实例源码)
C#设计模式三:FactoryMethod(含实例源码)
C#设计模式四:Prototype(含实例源码)
C#设计模式五:Builder(含实例源码)
C#设计模式六:Adapter(含实例源码)
C#设计模式七:Facade(含实例源码)
C#设计模式八:Proxy(含实例源码)
C#设计模式九:Flyweight(含实例源码)

相关文章

网友评论

      本文标题:C#设计模式八:Proxy(含实例源码)

      本文链接:https://www.haomeiwen.com/subject/rzwmgktx.html