设计模式之四:代理模式
这个代理模式我觉得跟装饰模式差不多。具体先来看简单的代码吧。
先声明一个抽象类:
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类的一个包装了。

浙公网安备 33010602011771号