第551篇--设计模式系统-Proxy

代码说明

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

注:在Adapter设计模式中,只有Adapter继承这个旧接口,目标客户端不粥承)

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

l         Account就是真实主题角色

何时采用

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

场景

 降低复杂度和提高使用效率:

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

注意事项

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

 代码:

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 = false ;
        IAccount account;
        public AccountProxy()
        {
            if (isDebug)
                account = new Account();
            else
                //account = (IAccount)Activator.GetObject(typeof(IAccount), "uri");
                account = Activator.CreateInstance(typeof(Account)) as IAccount;
        }

        public void Register()
        {
            Console.WriteLine("Please wait...");
            account.Register();
        }
    }
}


UML类图:

源码及UML源图:https://skydrive.live.com/#cid=6B286CBEF1610557&id=6B286CBEF1610557!738

posted @ 2013-05-08 23:27  Shanghai Jim Zhou  阅读(194)  评论(0编辑  收藏  举报