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

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

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

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();
        }

   有图有真相

  

posted @ 2015-10-29 10:09  荒古禁地  阅读(129)  评论(0编辑  收藏  举报