代理模式
来源:互联网 发布:种草网络语的英文 编辑:程序博客网 时间:2024/05/21 19:40
在写这篇代理模式之前,小编还特意的留意了以前写的C#中的委托。下面先来回
顾一下C#中的委托。
委托上场
逻辑代码
public static int AddOpen(int a,int b) { return a + b; } public static int SubOpen(int a,int b) { return a - b; } //定义一个方法,把一个函数作为一个参数 public static int PrintResult(GenericFun Action,int a,int b) { //调用相应函数的方法 int result = Action(a, b); return result; }
从上面我们看出两个方法都有相似的部分,比如说参数个数和类型相同。那么我们
根据这一点就可以把他们的方法委托给一个叫Action的函数,通过这个函数来实现调
用。
客户端代码
//委托的声明 public delegate int GenericFun(int a, int b); static void Main(string[] args) { //代表调用相加的方法 Console.Write("最终相加结果是:" + PrintResult(AddOpen ,5,6)); //代表调用相减的方法 Console.Write("最终相减的结果是:" + PrintResult(SubOpen ,15, 5)); }
有了委托,当在使用的时候,就可以通过委托来调用。
小结
委托其实是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数
来进行传递,这种将方法动态地赋给参数的做法,可以避免在程序中大量使用IF-else,
同时使得程序具有更好的扩展性。
说了这么多,与今天要的代理有毛线关系吗?先看一下代理模式的基本框架
代理模式
基本框架
Subject类,定义了RealSubject和Proxy的共同接口,这样就可以在任何使用
RealSubject的地方都可以使用Proxy
RealSubject类:定义Proxy所代表的真实实体。
Proxy类:保存了一个引用使得代理可以访问实体,并提供一个与Subject的接口相
同的接口,这样就可以代替实体。
牛刀小试
看这么多大家可能比较眼花缭乱的,小编在此为大家奉献一个例子,在进一步的
消化。
(以下这个例子仿照设计模式中的例子,添加了一些个人的理解)
类图
这个例子就是日常生活中男主人公羞涩难开口,通过代理来送女主角鲜花的故事。
代码
static void Main(string[] args) { SchoolGirl jiaojiao = new SchoolGirl(); jiaojiao.Name = "李娇娇"; Proxy daili = new Proxy(jiaojiao); daili.GiveDolls(); daili.GiveFlowers(); daili.GiveChocolate(); Console.Read(); } } //送礼物的接口,这就是真正实体的抽象方法。 interface GiveGift { void GiveDolls(); void GiveFlowers(); void GiveChocolate(); } //代理实现接口 class Proxy : GiveGift { //实例化真正实体 Pursuit gg public Proxy(SchoolGirl mm) { gg = new Pursuit(mm); } //调用真正实体的方法 public void GiveDolls() { this.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; } }
小结
代理模式就是为其他对象提供一种代理以控制对这个对象的访问。
代理模式的应用
远程代理
为一个对象在不同的地址空间提供局部代表,这样就可以隐藏一个对象存在于不同地址空间的事实。
虚拟代理
根据需要创建开销很大的对象,通过它来存放实例化需要很长时间的真实对象。
安全代理
用来控制真实对象访问时的权限。
智能指引
指当调用真实的对象时,代理处理另外一些事。
【以上内容,小编也很难理解,如果哪位大神经验丰富的话,可以跟小编指点迷津】
委托和代理都已经说完了,那么下面来分析下两者
委托和代理
委托是某种形式上的代理,但是对类似方法的一种代理。
代理模式是一种更高层次的抽象,针对的是一个类,把想要代理的方法抽象为一个
接口,然后让代理对象去通过这个接口来间接的调用,从而实现代理。
- 代理模式--动态代理
- 代理模式-静态代理
- 代理模式-静态代理
- 代理模式 & 动态代理
- 代理模式--静态代理
- 代理模式--动态代理
- 代理模式(动态代理)
- 代理模式-动态代理
- 代理模式-动态代理
- 代理模式动态代理
- 代理模式-静态代理
- 代理模式-动态代理
- 代理模式 -动态代理
- 代理模式---动态代理
- 代理模式-动态代理
- 代理模式--静态代理
- 代理模式!
- 代理模式
- uva Excuses, Excuses!
- 用户权限管理
- rpm 命令详解
- [DS&A]基本排序比较
- JS中showModalDialog 详细使用
- 代理模式
- C++指针和引用的区别
- 事务
- Hibernate---我的Hibernate学习笔记
- 因工程要求,需要找出最大的5个值。
- 网页设计常用色彩搭配表 - 配色表
- 千万级并发HAproxy均衡负载系统介绍
- PHP利用CKEditor上传图片
- 关于微软官网上提供的 SQL Server® 2008 R2 SP2各版本分析