C#学习笔记-代理模式
题目:A追B,但是羞于表示,所以A通过C给B一直送礼物以讨得欢心。
分析:
根据就分为三个类,SchoolGirl一个类,这个类只需要获得名字就好了;Pursuit一个类,这个类需要实现送礼物这个方法,需要设定他的追求对象是SchoolGirl;Proxy一个类,作为中间人,他并未准备礼物,所以他需要调用Pursuit的礼物类,同时他需要联系到SchoolGirl,已达到将礼物送至她手上的功能。
接口:
- /**
- * 接口用于描述一组类的公共方法/公共属性.
- * 它不实现任何的方法或属性,只是告诉继承它的类《至少》要实现哪些功能,
- * 继承它的类可以增加自己的方法.
- */
- interface GiveGift
- {
- void GiveDolls();
- void GiveFlowers();
- void GiveChocolate();
- }
SchoolGirl类:
- class SchoolGirl
- {
- private string name;
- public string Name
- {
- get { return name; }
- set { name = value; }
- }
- }
Pursuit类:
- class Pursuit : GiveGift
- {
- SchoolGirl girl;
- public Pursuit(SchoolGirl mm)
- {
- this.girl = mm;
- }
- public void GiveDolls()
- {
- Console.WriteLine("give dolls for " + girl.Name);
- }
- public void GiveFlowers()
- {
- Console.WriteLine("give flowers for " + girl.Name);
- }
- public void GiveChocolate()
- {
- Console.WriteLine("give chocolate for " + girl.Name);
- }
- }
Proxy类:
- class Proxy : GiveGift
- {
- Pursuit boy;
- public Proxy(SchoolGirl mm)
- {
- boy = new Pursuit(mm);
- }
- public void GiveDolls()
- {
- boy.GiveDolls();
- }
- public void GiveFlowers()
- {
- boy.GiveFlowers();
- }
- public void GiveChocolate()
- {
- boy.GiveChocolate();
- }
- }
主函数:
- static void Main(string[] args)
- {
- SchoolGirl girl = new SchoolGirl();
- girl.Name = "Pretty";
- Proxy someone = new Proxy(girl);
- someone.GiveDolls();
- someone.GiveFlowers();
- someone.GiveChocolate();
- Console.Read();
- }
注:文中所有代码及知识点均来自于《大话设计模式》,本人属于边学边看边敲代码边总结的阶段。
C#学习笔记-代理模式的更多相关文章
- 学习笔记——代理模式Proxy
代理模式,主要是逻辑和实现解耦.具体逻辑如何,由代理Proxy自己来设计,我们只需要把逻辑Subject交给代理即可. 主要应用场景,包括创建大开销对象时,使用代理来慢慢创建:远程代理,如网络不确定时 ...
- 《Head First 设计模式》学习笔记——代理模式
设计模式 代理模式:为还有一个对象提供一个替身或占位符以控制对这个对象的訪问. 使用代理模式创建代表对象,让代表对象控制某对象的訪问,被代理的对象能够使远程的对象(远程代理).创建开销大的对象(虚拟代 ...
- Java-马士兵设计模式学习笔记-代理模式-聚合与继承方式比较
一.概述 1.目标:要在Tank的move()方法做时间代理及日志代理(可以设想以后还要增加很多代理处理),且代理间的顺序可活更换 2.思路: (1)聚合:代理类聚合了被代理类,且代理类及被代理类都实 ...
- Java-马士兵设计模式学习笔记-代理模式-动态代理 调用Proxy.newProxyInstance()
一.概述 1.目标:不自己写代理类,利用Proxy.newProxyInstance()动态生成 2.用到的知识点: (1)//编译源码,生成class,注意编译环境要换成jdk才有compiler, ...
- Java-马士兵设计模式学习笔记-代理模式-动态代理 修改成可以任意修改代理逻辑
一.概述 1.目标:动态代理的代理逻辑可以任意修改 2.思路: (1)要把代理逻辑抽离,站在jvm的角度思考,应独立出InvocationHandler接口,并接收被代理的对象及方法作为参数invok ...
- 《Head first设计模式》学习笔记 – 迭代器模式
<Head first设计模式>学习笔记 – 迭代器模式 代器模式提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露其内部的表示. 爆炸性新闻:对象村餐厅和对象村煎饼屋合并了!真是个 ...
- 设计模式学习之代理模式(Proxy,结构型模式)(11)
参考地址:http://www.cnblogs.com/zhili/p/ProxyPattern.html 一.引言 在软件开发过程中,有些对象有时候会由于网络或其他的障碍,以至于不能够或者不能直接访 ...
- javascript设计模式学习之六——代理模式
一.代理模式定义 代理模式的关键是:当客户不方便直接访问一个对象或者不满足需要的时候,提供一个替身对象来控制对这个对象的访问.代理模式需要和本体对外提供相同的接口,对用户来说是透明的.代理模式的种类有 ...
- 设计模式学习心得<代理模式 Proxy>
在代理模式(Proxy Pattern)中,一个类代表另一个类的功能.这种类型的设计模式属于结构型模式. 在代理模式中,我们创建具有现有对象的对象,以便向外界提供功能接口. 概述 意图 为其他对象提供 ...
随机推荐
- [CentOS] 7 不执行文件 /etc/rc.d/rc.local
chmod 0755 /etc/rc.local systemctl enable rc-local.service --now systemctl restart rc-local.service
- 爬虫6:pyquery库
强大又灵活的网页解析库,如果觉得正则写起来太麻烦,BeautifulSoup语法太难记,而你又熟悉jQuery的语法,那么用PyQuery就是最佳选择 一. 初始化 1. 字符串初始化 h ...
- python 类中的某个函数作为装饰器
在python的类中,制作一个装饰器的函数, class A: def wrapper(func): ###装饰器 def wrapped(self,*arg,**kwargs) ... return ...
- C#-WebForm-组合查询(Queryable延迟查询、Intersect交集)、分页展示基础
组合查询: 方法一:Queryable<> 延迟查询 其特点是:读到词句代码时不会立即执行,而是在进行数据绑定时执行 优点:此期间可以进行添加查询条件,以减少数据库查询内容,来减少内存占用 ...
- jsp页面用struts2标签展示List<Object>类型的数据
今天遇到一个问题,一个List<Object>类型的数据,是直接从sql查出来的数据,要在前端展示,原来的方法不知道为什么不能展示,后来找了好久,找到了一个靠谱的方法,记录一下 <s ...
- FZU_1894 志愿者选拔 【单调队列】
1 题面 FZU1894 2 分析 单调队列的典型引用 需要注意的是在用维护辅助队列的时候,$L$和$R$的初始化都是0时,队列第一个数就是$L$,最后一个数就是$R-1$. 3 AC代码 #incl ...
- RocketMQ详解
原文链接:http://www.cnblogs.com/xiaodf/p/5075167.html 简介 官方简介: RocketMQ是一款分布式.队列模型的消息中间件,具有以下特点: 能够保证严格 ...
- Sweep Line
391. Number of Airplanes in the Sky https://www.lintcode.com/problem/number-of-airplanes-in-the-sky/ ...
- LoginForm表单的执行过程
读取这篇文章,您将了解到 提前熟悉几个基础点 LoginForm表单的执行过程 首先我们看表单模型 声明验证规则 填充模型 触发验证 默认的用户密码加密 用户验证中使用Salt 数据验证 调试Yii ...
- ECharts-入门学习
最近因项目需要要做图表,后台数据要以柱状图的形式展示,通过上网查找,感觉ECharts这个js控件挺不错的,下面就把入门知识搞一下. 一.下载ECharts控件. 地址:http://echarts. ...