• 代理模式 -- 大话设计模式


    在今天,读书有时是件“麻烦”事。它需要你付出时间,付出精力,还要付出一份心境。--仅以《大话设计模式》来祭奠那逝去的……

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

    1.追MM那点事

      一个校园女孩mm,公园散步;小伙子gg,在公园偶遇mm,一见钟情;但是gg不认识mm,没胆送礼物,于是找到代理Proxy,让其帮忙送礼物;

      首先定义一个校园女孩mm,让其在公园散步

        /// <summary>
        /// 校园女孩类
        /// </summary>
        public class SchoolGirl
        {
            public string Name { get; set; }
        }
    

       其次,分析送礼物这个事,是gg送礼物,而不是proxy要送礼物,proxy只是帮忙送礼物。因此gg和proxy都有送礼物这个动作。抽象出来一个接口GiveGift

        /// <summary>
        /// 送礼物接口
        /// </summary>
        public interface GiveGift
        {
            void GiveDolls();
            void GiveFlowers();
        }
    

       gg对女孩一见钟情,要送礼物给女孩(将女孩的照片内置到追求者心中==类中),所以定义一个最求者类,并包含几个送礼物的方法

        /// <summary>
        /// 追求者类
        /// </summary>
        public class Pursuit : GiveGift
        {
            protected SchoolGirl mm;
    
            public Pursuit(SchoolGirl mm)
            {
                this.mm = mm;
            }
    
            public void GiveDolls()
            {
                Console.WriteLine(mm.Name + "送你洋娃娃");
            }
    
            public void GiveFlowers()
            {
                Console.WriteLine(mm.Name + "送你鲜花");
            }
        }
    

       gg是个笨蛋,想送不敢自己去,要找代理帮他送。定义一个代理类,帮他送礼物

        /// <summary>
        /// 代理类
        /// </summary>
        public class Proxyor : GiveGift
        {
            Pursuit gg;
    
            public Proxyor(Pursuit gg)
            {
                this.gg = gg;
            }
    
            public void GiveDolls()
            {
                gg.GiveDolls();
            }
    
            public void GiveFlowers()
            {
                gg.GiveFlowers();
            }
        }
    

       回放整个gg追求mm的过程

            static void Main(string[] args)
            {
                //一个校园女孩mm,公园散步
                SchoolGirl mm = new SchoolGirl();
                mm.Name = "娇娇";
    
                //小伙子gg,在公园偶遇mm,一见钟情
                Pursuit gg = new Pursuit(mm);
    
                //但是gg不认识mm,没胆送礼物,于是找到代理Proxy,让其帮忙送礼物
                Proxyor proxy = new Proxyor(gg);
                proxy.GiveDolls();
                proxy.GiveFlowers();
            }
    

       有图有真相

      

  • 相关阅读:
    java和.NET的比较
    联想笔记本不能无线上网
    js根据给定的日期计算当月有多少天
    jQuery中live()变更
    C#操作xml文件
    SQL server的with的用法(一)
    jquery拖拽实现UI设计组件
    自定义弹出框
    第一个超级简单Node.js实例
    windows 下使用redis
  • 原文地址:https://www.cnblogs.com/amywechat/p/4919549.html
Copyright © 2020-2023  润新知