代理模式

来源:互联网 发布:没有充电器 给mac充电 编辑:程序博客网 时间:2024/05/16 06:00
 

代理模式(Proxy Pattern):
为其他对象提供一种代理以控制对这个对象的访问。客户端调用时直接使用代理来访问。

结构说明(结构图略)
Subject类:定义了RealSubject和Proxy的公用接口,这样就在任何使用RealSubject的地方都可以用Proxy类代理访问。
RealSubject类:定义了Proxy所代表的真实实体
Proxy类:保存一个引用使得代理可以访问实体,并提供一个与Subject的接口相同的接口,这样代理就可以用来代替实体。

分类:
(1)Virtual Proxy 虚拟代理:Proxy不会生成一个真实的耗费代理,直到非常有必要时(首次请求时)。它用来存放
花费大(实例化需要很长时间)的真实对象。(如:网页图片的首次加载)
(2)Remote Proxy(远程代理):本地的代理对象控制一个远程的对象。(如:WebService的调用)
(3)Protection Proxy(安全代理):代理检查调用真实对象所需要的权限。
(4)Smart Reference(智能引用):当调用真实的对象时,代理处理另外一些事。

实例:模拟快捷方式代理打开应用程序
在桌面上创建一个快捷方式,双击也能打开相应的应用程序,这其实就是一个代理模式。

 

/// <summary>
    /// 公共接口类:Subject类
    /// </summary>
    public  interface IShortCut
    {
        //定义一个方法用于运行指定路径的应用程序
        void RunApplication(string path);
    }

 

/// <summary>
    /// 真实实体类:RealSubject类
    /// </summary>
    public class RealShortCut:IShortCut
    {
        public void RunApplication(string path)
        {
            try
            {
                System.Diagnostics.Process.Start(path);
            }
            catch (Exception ex)
            {
               
                throw;
            }

        }
    }

 

/// <summary>
    /// 代理类:Proxy
    /// </summary>
    public class ProxyShortCut:IShortCut
    {
        RealShortCut shortcut;
        public void RunApplication(string path)
        {
            if (shortcut == null)
            {
                shortcut = new RealShortCut();
            }
            shortcut.RunApplication(path);
        }
    }

 

调用:

ProxyShortCut shortcut = new ProxyShortCut();
 shortcut.RunApplication("notepad.exe");