首页 > 代码库 > 代理模式

代理模式

嫁给程序员的好处
1.男程序员不修边幅,所以家里不用保持太整洁。
2.男程序员很难有女朋友,所以他会对目前的这个死心塌地。
3.男程序员呆板无趣,根本不活在人的社会中,只活在图表的世界里所以美女不必花心思去取悦他。
4.男程序员视修理东西为娱乐,在美女生气时大可在他面前摔东西出气,他会很高兴的帮美女修好又不必花钱。
5.男程序员IQ都不低,所以嫁给他后可以生一堆这样的儿子考一堆的满分让美女去跟街坊炫耀。
6.男程序员待在办公室的时间比在家里多,所以嫁给他以后还是很自由。
7.男程序员口才太差根本讲不过美女,所以美女可以尽情用言辞凌辱他。
8.男程序员最讲求【理】,所以美女有理的话他服美女;他如果有理,美女就不要跟他讲理,他对美女一点办法也没有。
9.男程序员薪水不错,自己不会娱乐不怎么花钱也很少女人花他钱,所以美女可以大大方方的花他钱,并且告诉他这是促进经济繁荣,他做出来的东西才有人买。
10.男程序员除了以上之外毫无魅力可言,所以嫁给他不用担心他有外遇。
以上文字仅供参考,接下来就让我们进入今天的正题吧,今天就说说代理模式,所谓代理模式就是为其他对象提供一种代理以控制对这个对象的访问。
下面就引入一个小例子来说明今天的主题:
相信大家都看过西游记里猪八戒背媳妇那一段吧,当猪八戒背着高小姐回高老庄的时候,其实他不知道他背的竟是未来的大师兄猴哥。让我们来理一下这里面的逻辑关系
本来猪八戒应该是背着高小姐的,却背的是猴哥。在这里猴哥就是一个代理来代替高小姐应该做的事情。这就是简单的代理模式。听起来很简单吧!的确代理模式确实不怎么难
理解,但想用好它却不是件易事,需要结合大量的实践才能深入理解其中的奥秘(貌似所有的事情都是如此)

经过以上的小例子相信大家已经知道什么是代理模式了吧
下面就让我们结合程杰老师的《大化设计模式》中的例子来详细讲解一下今天的主题吧!
现在有一个女生名字叫娇娇,有两个男生分别叫戴笠和卓假易,因为戴笠和娇娇是同班同学所以经常见面,而卓假易和戴笠是好朋友但却和他不在一个班。
有一天卓假易看上了这个叫娇娇的女孩于是就委托戴笠送给娇娇洋娃娃、鲜花、巧克力还有很多很多(相信女生都挺羡慕娇娇的吧)......

在这里戴笠就充当了一个代理的作用,代替卓假易完成任务
下面让我们分析一下代码
首先创建娇娇的代码
public class Girl//相当于娇娇
    {
        public string Name
        {
            set;
            get;
        }
        public Girl(string name)
        {
            this.Name = name;
        }


    }

创建卓假易的代码

public class Pursuit//相当于卓假易
    {
        Girl girl = null;
        public Pursuit(Girl girl)
        {
            this.girl = girl;
        }
        public void SendDoll()
        {
            Console.WriteLine(girl.Name + " 送你洋娃娃");
        }
        public void SendFlower()
        {
            Console.WriteLine(girl.Name + " 送你鲜花");
        }
        public void SendChocolate()
        {
            Console.WriteLine(girl.Name + " 送你巧克力");
        }

    }

最后创建戴笠的代码

 public class Proxy//相当于戴笠
    {
        Pursuit pursuit;
        public Proxy(Girl girl)
        {
            pursuit = new Pursuit(girl);
        }
        public void SendDoll()
        {
            pursuit.SendDoll();
        }
        public void SendFlower()
        {
            pursuit.SendFlower();
        }
        public void SendChocolate()
        {
            pursuit.SendChocolate();
        }
    }

从Proxy类的内部来分析首先实例化了一个Pursuit,然后用这个对象在Proxy类中调用自己的方法

说白了代理模式就是在代理类中实现自己的方法,而让代理类在控制台实现自己的方法的一种模式

下面我给出主函数的代码

static void Main(string[] args)
        {
            Girl mm = new Girl("娇娇");
            Proxy proxy = new Proxy(mm);
            proxy.SendDoll();
            proxy.SendFlower();
            proxy.SendChocolate();
            Console.ReadKey();
        }

那么代理模式都用在哪些方面呢?

第一、远程代理(例子是webservice在.Net中的应用)

第二、虚拟代理(浏览器加载图片时的优化)

第三、安全代理(设置访问权限的时候)

以上三种用途虽然本人也了解一点但自认为不是特别懂,这里只是给有兴趣的读者提供一个线索

终于写完了,让我们回到本文开头程序员娶媳妇的问题,在这里只想建议各位男程序员追女朋友的时候千万别用代理模式,要不然别人怎么会了解我们还有那么多优点呢,

哈哈,开个玩笑,以后我还会继续研究设计模式,继续写博客的,有兴趣的童鞋可以关注我哦!