博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
代理模式 -- 大话设计模式
阅读量:4576 次
发布时间:2019-06-08

本文共 1754 字,大约阅读时间需要 5 分钟。

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

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

1.追MM那点事

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

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

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

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

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

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

///     /// 追求者类    ///     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是个笨蛋,想送不敢自己去,要找代理帮他送。定义一个代理类,帮他送礼物

///     /// 代理类    ///     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();        }

   有图有真相

  

转载于:https://www.cnblogs.com/amywechat/p/4919549.html

你可能感兴趣的文章
转:HashMap的工作原理,及笔记
查看>>
Day 2 Python数值计算
查看>>
python3-基础5
查看>>
vue-cli 引入axios及跨域使用
查看>>
[UE4]创建对象的的几种姿势(C++)
查看>>
[UE4]修改射击方向
查看>>
四种UNIX实现
查看>>
ubuntu12.10 jdk1.7安装
查看>>
Median
查看>>
探讨复杂linq之group by 和 join
查看>>
Failed to instantiate CLSID_VirtualBox w/ IVirtualBox, but CLSID_VirtualBox w/ IUnknown works.
查看>>
Linux打开和关闭端口
查看>>
HTML To Word
查看>>
java Synchronized 学习
查看>>
linux mysqlERROR 1045 (28000): linux忘记数据库密码
查看>>
常用正则表达式
查看>>
在 RHEL/CentOS 7 上配置NTP时间服务器
查看>>
链表:创建一个简单的链表并输出链表内容
查看>>
python 集中基本数据类型
查看>>
may be a diary?
查看>>