大话设计模式,让你的代码更完美3---代理模式
来源:互联网 发布:虚拟打印机软件 编辑:程序博客网 时间:2024/06/05 06:16
需求:使用代理模式,让你代理张三给妹纸送鲜花。
创建一个送礼物的接口:
//送礼物 interface GiveGift { void GiveDolls(); void GiveFlowers(); void GiveChocolate(); }
实现送礼物接口,创建代理类(本人):
class Proxy : GiveGift { Pursuit gg; public Proxy(SchoolGirl mm) { gg = new Pursuit(mm); } public void GiveDolls() { gg.GiveDolls(); } public void GiveFlowers() { gg.GiveFlowers(); } public void GiveChocolate() { gg.GiveChocolate(); } }创建追求者张三:
class Pursuit : GiveGift { SchoolGirl mm; public Pursuit(SchoolGirl mm) { this.mm = mm; } public void GiveDolls() { Console.WriteLine(mm.Name + " 送你洋娃娃"); } public void GiveFlowers() { Console.WriteLine(mm.Name + " 送你鲜花"); } public void GiveChocolate() { Console.WriteLine(mm.Name + " 送你巧克力"); } }创建女神:
class SchoolGirl { private string name; public string Name { get { return name; } set { name = value; } } }主函数:
static void Main(string[] args) { SchoolGirl jiaojiao = new SchoolGirl(); jiaojiao.Name = "李娇娇"; Proxy daili = new Proxy(jiaojiao); daili.GiveDolls(); daili.GiveFlowers(); daili.GiveChocolate(); Console.Read(); }
接口:中定义了送礼物的方法,接口需要代理人和被代理人实现,代理人和被代理人不实现这些方法怎么送花?
代理类:代理类一定和被代理、女神间存在联系,如果代理类对两者都不认识,那还怎么玩?
所以代理类必须实现送礼物接口,其次是获取到女神对象,然后对追求者的送花。
献殷勤等进行封装,封装的目的就是经过一层,让追求者和女神不直接搭讪,必须通过你。
追求者:追求者要认识女神,不认识女神还怎么玩???......
追求者也要实现送礼物接口,不然没法给女神送礼物,其次是也要能获取到女神对象。
上述代码中:
首先创建了一个女神,然后创建代理类和爱慕者类。
女神是一个普通的类,代理类中则需要有个爱慕者对象,该代理类会将爱慕者的一些操作进行封装,进而让女神不知道是爱慕者送的鲜花。
但实际上真正的操作还是爱慕者,只是进行了一次封装,例如送鲜花等等
代理方法经常使用,例如接口的转换,常用的属性封装get/set等等。。。。
代理模式结构图
机结构图如上,代理类比较简单不再阐述。
0 0
- 大话设计模式,让你的代码更完美3---代理模式
- 大话设计模式,让你的代码更完美1---工厂模式
- 大话设计模式,让你的代码更完美2---嵌套装饰模式
- 大话设计模式,让你的代码更完美6---模版方法模式/迪米特
- 大话设计模式,让你的代码更完美7---外观模式
- 大话设计模式,让你的代码更完美8---建造者模式
- 大话设计模式,让你的代码更完美9---旁观者模式
- 大话设计模式,让你的代码更完美10---抽象工厂模式
- 大话设计模式,让你的代码更完美11---状态模式
- 大话设计模式,让你的代码更完美5---浅复制和深复制
- 大话设计模式,让你的代码更完美4---简单工厂模式和工厂方法模式
- 大话设计模式4 代理模式 的java代码实现
- 大话设计模式 代理模式
- 大话设计模式-代理模式
- 大话设计模式-代理模式
- 大话设计模式-代理模式
- 大话设计模式-代理模式
- 大话设计模式--代理模式
- 第一个Django应用
- SpringBoot入门系列:第二篇 再学Hello World
- 从零开始 React Native(7) 搭建React Native 环境
- 解决GAT项目Bug:导入Excel的时候没有对日期格式进行验证
- ionic v1 添加点击展开/收缩功能
- 大话设计模式,让你的代码更完美3---代理模式
- C#连接SQL Server数据库
- SpringBoot入门系列:第三篇 日志输出
- [SpringMVC] Maven + Eclipse 项目demo搭建
- Android EditText输入限制最大字符长度 和 限制只能输入数字和字母(包含大小写)
- SpringBoot入门系列:第四篇 redis
- HTTPClient4.5.2学习笔记(一):基础篇
- CENTOS 给iptables防火墙添加允许访问 的端口(添加端口白名单)
- mysql主从复制原理和注意事项