设计模式之四:代理模式

 

 

 

这个代理模式我觉得跟装饰模式差不多。具体先来看简单的代码吧。

先声明一个抽象类:

1 /// <summary>
2  /// 声明一个抽象类,里面定义一个抽象的Request方法
3  /// </summary>
4  abstract class Subject
5 {
6 public abstract void Request();
7 }

再定义一个继承了该类的RealSubject 类:

1 /// <summary>
2  /// 继承Subject类,重写Request方法
3  /// </summary>
4  class RealSubject : Subject
5 {
6 public override void Request()
7 {
8 Console.WriteLine("真实的请求");
9 }
10 }

 

该类重写了Request方法,实现了真实的请求。

最后定义一个继承了Subject的代理类Proxy:

Proxy 代码
1 /// <summary>
2 /// 定义一个代理类,继承Subject类
3 /// </summary>
4 class Proxy : Subject
5 {
6 /// <summary>
7 /// 声明一个RealSubject类
8 /// </summary>
9 RealSubject realSubject;
10
11 /// <summary>
12 /// 重写基类的Request方法
13 /// </summary>
14 public override void Request()
15 {
16 if (realSubject == null)
17 {
18 realSubject = new RealSubject();
19 }
20 //调用realSubject对象的Request方法
21 realSubject.Request();
22 }
23 }

在代理类重写的Request方法中,调用了RealSubject类中的Request方法。

然后看一下简单的客户端代码:

1 //定义一个代理对象
2 Proxy proxy = new Proxy();
3 //调用代理对象的Request方法
4 proxy.Request();
5
6 Console.Read();

 

这个客户端中实例化了代理类,调用了代理类中的Request方法,但是由于在代理类的Request方法中,实例化

了RealSubject类,然后调用了Realsubject类中的Request方法,所以代理类实际上运行的是RealSubject类中

的Request方法。

 

感觉这个跟装饰模式非常相似,我只要在Proxy类中重写的Request方法中再写几个自己的逻辑,就是对

RealSubject类的一个包装了。

posted on 2010-03-18 14:21  狐狸的尾巴  阅读(218)  评论(0)    收藏  举报

导航