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

本文介绍了代理模式的概念,通过西门庆与潘金莲的故事生动阐述了代理的作用,即作为中介控制对原对象的访问。代理模式利用多态特性,确保代理类和被代理类拥有相同的接口或继承自同一抽象类,实现对实际对象操作的控制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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.总结

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



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值