《设计模式之禅》学习之代理模式

来源:互联网 发布:小甲鱼python课后作业 编辑:程序博客网 时间:2024/06/15 05:44

1.代理模式(Proxy Pattern):通俗的来讲,我很忙,忙的没空理你,那你要找我呢就先找我的代理人吧,那代理人总要知道被代理人能做哪些事情不能做哪些事情吧,那就是两个人具备同一个接口,代理人虽然不能干活,但是被代理的人能干活呀。即定义为:为其他对象提供一种代理以控制对这个对象的访问。

2.情节描述:比如西门庆找潘金莲,那潘金莲不好意思答复呀,咋办,找那个王婆做代理。卢俊义的老婆贾氏(就是和那个固管家苟合的那个),这名字起的:“假使”,那我们也让王婆做她的代理。

3.类图描述:


4代码描述:

 class XiMenQing    {        static void Main(string[] args)        {                       PanJinLian pjl = new PanJinLian();            WangPo wp = new WangPo(pjl);//代理金莲            wp.makeEyesWithMan();            wp.makeHappyWithMan();            Console.WriteLine("--完事---");            wp = new WangPo(new JiaShi());            wp.makeEyesWithMan();            wp.makeHappyWithMan();            Console.ReadKey();        }    }    public interface KindWoman    {         void makeEyesWithMan();         void makeHappyWithMan();    }    public class PanJinLian:KindWoman    {        public   void makeEyesWithMan()        {            Console.WriteLine("金莲抛媚眼……");        }        public void makeHappyWithMan()        {            Console.WriteLine("金莲和男人happy……");        }    }    public class JiaShi : KindWoman    {        public   void makeEyesWithMan()        {            Console.WriteLine("贾氏抛媚眼……");        }        public   void makeHappyWithMan()        {            Console.WriteLine("贾氏和男人happy……");        }    }    public class WangPo : KindWoman    {        private KindWoman kindWoman;        public WangPo()        {            this.kindWoman = new PanJinLian();        }        public WangPo(KindWoman kindWoman)        {            this.kindWoman = kindWoman;        }        public   void makeEyesWithMan()        {            this.kindWoman.makeEyesWithMan();        }        public   void makeHappyWithMan()        {            this.kindWoman.makeHappyWithMan();        }    }


5.总结

说完这个故事,那额总结一下,代理模式主要使用了面向对象三大特性之一  ——多态,干活的是被代理类,代理类主要是接活,你让我干活,好,我交给幕后的类去干,你满意就成,那怎么知道被代理类能不能干呢?同根就成,大家知根知底,你能做啥,我能做啥都清楚的很,同一个接口或者都继承实现一个类呗,参见另一种描述(利用抽象类进行描述),如图: