设计模式——代理模式
来源:互联网 发布:java控制鼠标移动 编辑:程序博客网 时间:2024/06/05 07:24
//抽象对象类,定义了RealSubject和Proxy的共用接口
//这样就在任何使用RealSubject的地方都可以使用Proxy
abstract class Subject
{
public abstract void Request();//抽象方法,代理者和实体都重写
}
//实体类,是代理者Proxy所代表的真是实体
class RealSubject : Subject
{
public override void Request()
{
Console.WriteLine("真是的请求");
}
}
//代理者的类,保存一个引用使得代理可以访问实体,
//并继承自Subject,重写抽象接口,这样代理就可以用来替代实体
class Proxy : Subject
{
RealSubject realSubject = null;
//这里调用请求方法,实际是调用实体的请求方法
public override void Request()
{
if(realSubject == null)
{
realSubject = new RealSubject();
}
realSubject.Request();
}
}
其实代理模式不难理解,就是访问者(客户端)通过代理对象(Proxy)间接访问被访问者(RealSubject实体)。代理模式一般用在以下几种场合:一、远程代理,也就是为一个对象在不同的地址空间提供局部代表,这样可以隐藏一个对象在于不同地址空间的事实(.Net中的WebService就是典型的代理模式运用,引用一个WebService 会在项目中生成一些文件夹和文件,它们就是代理,以此来解决远程访问的问题);二、虚拟代理,是根据需要创建开销很大的对象,通过它来存放实例化需要很长时间的真实对象(例如打开一个网站时,网速一般的情况下,经常是先显示所有的文字,然后图片却是慢慢的 加载出来,未加载出来的图片空框,就是通过虚拟代理来替代的真是图片);三、安全代理,用来控制真是对象访问时的权限,一般用于对象有不同的访问权限的时候;四、智能指引,是指当调用真实对象时,代理处理另外一些事。//客户端程序
class MainProgram
{
public void Main()
{
Proxy proxy = new Proxy();
proxy.Request();
Console.ReadKey();
}
}
//这里面的主角——漂亮的美眉
class Girl
{
private string name;
public string Name
{
get { return name; }
}
public Girl(string name)
{
this.name = name;
}
}
//追求行为的接口,代理人和追求者都实现里面的接口
public interface IGiveGift
{
void GiveGift(string giftName); //赠送礼物的方法
void DateOne(); //约会的方法
}
//追求者,实现追求的接口
class Pursuit : IGiveGift { private Girl girl;//保存追求的美眉 public Pursuit(Girl girl) { this.girl = girl; }//约会 public void DateOne() { Console.WriteLine("想约" + girl.Name + "出去吃饭!"); }//送礼物 public void GiveGift(string giftName) { Console.WriteLine(girl.Name + ",送你" + giftName); } }
//代理人,实现追求行为的接口(其实是帮追求者实现的)
class Proxy : IGiveGift
{
Pursuit pursuit = null;//保存追求者
public Proxy(Girl girl)
{
pursuit = new Pursuit(girl); //代理创建追求者
}
public void DateOne()
{
pursuit.DateOne(); //实现方法调用追求者相应的方法
}
public void GiveGift(string giftName)
{
pursuit.GiveGift(giftName); //实现方法调用追求者相应的方法
}
}
class Program //客户端程序
{
static void Main(string[] args)
{
Girl girl = new Girl("美眉");//首先要有一个美眉
Proxy proxy = new Proxy(girl); //其次是代理人,而追求者就隐藏在代理人中
proxy.GiveGift("巧克力");
proxy.GiveGift("鲜花");
proxy.DateOne(); //约会
Console.ReadKey();
}
}
- 设计模式—代理模式
- 设计模式—代理模式
- 设计模式—代理模式
- 设计模式—代理模式
- 设计模式—代理模式
- 设计模式—代理模式
- 设计模式—代理模式
- 设计模式—代理模式
- 设计模式—代理模式
- 设计模式—代理模式
- 设计模式——代理设计模式
- 设计模式——代理设计模式
- 每日设计模式——代理模式
- 学习设计模式——代理模式
- java设计模式——代理模式
- 设计模式——策略、代理模式
- 设计模式——代理模式(Proxy)
- 设计模式——代理模式
- 网络(喵喵喵?)
- LoRaWAN协议中文版 第8章 Class B介绍
- Cookies 和 Session的区别
- hdu 1874畅通工程续
- Unity5.5之NGUI创建静态字体
- 设计模式——代理模式
- 论游戏的可玩性
- 常用的一些Linux指令
- 拓扑排序--九度.1449.[优先级队列实现小顶堆]
- Linux下安装jdk8步骤详述
- 萌新自己记录学习javascript总结一
- 技术解读第三章
- 1030. Travel Plan (30) PAT 甲级
- 共通jar提取