码迷,mamicode.com
首页 > Windows程序 > 详细

C#面向对象设计之——代理模式(十三)

时间:2015-09-25 18:36:11      阅读:249      评论:0      收藏:0      [点我收藏+]

标签:

一、前言

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

二、结构图

技术分享

三、实例代码

namespace 代理模式
{
    class Program
    {
        static void Main(string[] args)
        {
            Proxy proxy = new Proxy();
            proxy.Request();

            Console.Read();
        }
    }

    abstract class Subject
    {
        public abstract void Request();
    }

    class RealSubject : Subject
    {
        public override void Request()
        {
            Console.WriteLine("真实的请求");
        }
    }

    class Proxy : Subject
    {
        RealSubject realSubject;
        public override void Request()
        {
            if (realSubject == null)
            {
                realSubject = new RealSubject();
            }

            realSubject.Request();
        }
    }
}

 

四、总结

什么时候使用代理模式呢?
第一,远程代理,也就是为一个对象在不同的地址空间提供局部代表,这样就可以隐藏一个对象存在于不同地址空间的事实。例如在.net中的webservice,当我们在应用程序中加入一个Web引用,引用一个webservice,则此时在项目中会生成一个WebReference的文件夹和一些文件,其实它们就是代理,这就使得客户端程序滴啊用代理就可以解决远程访问的问题。
第二,虚拟代理,根据需要创建开销很大的对象,通过它来存放实例化需要很长时间的真实对象,这样达到性能的最优化,例如打开一个很大的HTML页面,里面有很多文字和图片,那些文字加载了,但是图片没有加载完,只看到图片占用一定大小的空间,等待内容的填充,这就是通过虚拟代理来替代真实的图片,此时代理存储了真实的图片的路径和尺寸,这就是浏览器中用到的模式进行优化下载。
第三,安全代理,用来控制真实对象的访问权限。
第四,智能指引,指当调用真实的对象时,代理处理另外一些事,例如计算真实对象的引用次数,这样当该对象没有引用时,可以自动释放它,或者当第一次引用一个持久对象时,将它装入内存,或在访问一个实际对象前,检查是否已经锁定它了,以保证其他对象不能改变它。

C#面向对象设计之——代理模式(十三)

标签:

原文地址:http://www.cnblogs.com/kesimin/p/4838823.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!