当前位置:  编程技术>.net/c#/asp.net

c# 代理模式

    来源: 互联网  发布时间:2014-10-15

    本文导语:  代理模式的应用:远程代理,为一个对象在不同的地址空间提供局部代表,可以隐藏一个对象存在于不同地质空间的事实。虚拟代理,根据需要创建开销很大的对象,通过代理来存放实例化需要很长时间的真实对象。安全代理...

代理模式的应用:

远程代理,为一个对象在不同的地址空间提供局部代表,可以隐藏一个对象存在于不同地质空间的事实。
虚拟代理,根据需要创建开销很大的对象,通过代理来存放实例化需要很长时间的真实对象。
安全代理,用来控制真实对象的访问权限。
智能代理,当调用代理时,可以代理处理一些额外的功能。
案例场景:
向一位自己心仪的女孩表达爱意,一般我们有两种选择:亲自出马(有自信的人)和 使用‘媒婆'(比较害羞)。
其中使用‘媒婆'就是代理行为,我们实现如下:
 调用代理模式的主函数:
代码如下:

    class Program
    {
        static void Main(string[] args)
        {
            SchoolGirl jiaojiao = new SchoolGirl();
            jiaojiao.Name = "李娇娇";
            //亲自出马
            IGiveGift self = new Pursuit(jiaojiao);
            self.GiveChocolate();//送巧克力
            self.GiveDolls();//送洋娃娃
            self.GiveFlowers();//送鲜花
            //使用‘媒婆'
            IGiveGift daili = new Proxy(jiaojiao);
            daili.GiveChocolate();//送巧克力
            daili.GiveDolls();//送洋娃娃
            daili.GiveFlowers();//送鲜花
            Console.ReadKey();
        }
    }
 

SchoolGirl类是代表女孩对象,实现如下:
代码如下:

    public class SchoolGirl
    {
        private string name;
        public string Name
        {
            get;
            set;
        }
    }
 

Pursuit类是代表一个真实的事物(追求女孩的追求者),实现如下:
代码如下:

    public class Pursuit : IGiveGift
    {
        SchoolGirl mm;
        public Pursuit(SchoolGirl mm)
        {
            this.mm = mm;
        }
        public void GiveDolls()
        {
            Console.WriteLine(mm.Name+"送你洋娃娃");
        }
        public void GiveFlowers()
        {
            Console.WriteLine(mm.Name + "送你鲜花");
        }
        public void GiveChocolate()
        {
            Console.WriteLine(mm.Name + "送你巧克力");
        }
    }
 

Proxy类是Pursuit类的代表,实现如下:
代码如下:

    public class Proxy : IGiveGift
    {
        Pursuit gg;
        public Proxy(SchoolGirl mm)
        {
            this.gg = new Pursuit(mm);
        }
        public void GiveDolls()
        {
            gg.GiveDolls();
        }
        public void GiveFlowers()
        {
            gg.GiveFlowers();
        }
        public void GiveChocolate()
        {
            gg.GiveChocolate();
        }
    }
 

Pursuit类和Proxy类都继承IGiveGift接口,实现如下:
代码如下:

    interface IGiveGift
    {
        void GiveDolls();
        void GiveFlowers();
        void GiveChocolate();
    }

我们看一张代理模式的结构图:

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 正向代理与反向代理概念及其区别
  • *** Linux下装Kingate软件做代理,如何能实现同时代理两个网段?
  • 代理服务器原理,功能及作用详细介绍
  • sql server 代理(已禁用代理xp)的解决方法
  • 上网代理goagent 3.1.18 正式版下载及简易安装部署教程
  • 代理、反向代理究竟是什么意思?
  • Spring 2.0 AOP概念及AOP代理,功能和目标
  • 如何通过http代理实现socks代理?
  • 用 Linux 做的代理服务器,不能通过代理看外网的电影
  • Linux作透明代理服务器,双网卡,要求使用该代理的用户绑定ip,如何实现?
  • 在linux(redhat) 下如何设置代理,我们上网都要用代理的!谢谢了!
  • linux下对于不支持代理的http或是ftp软件有办法使用代理吗
  • squid+nat做透明代理无法控制代理的问题
  • java 静态代理 动态代理深入学习
  • java代理 jdk动态代理应用案列
  • Linux怎么设置代理的问题
  • linux机如何设置代理
  • 救命!Mozilla不能通过代理上网了!!!
  • 代理工具 ProxyChains
  • 如何使用代理访问CVS?
  • linux怎么访问windows2000的代理?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3