我们按照UML图来做一个简单的例子进行初步体验
(1.1)抽象主题类Subject
/// <summary> /// 抽象角色 /// </summary> public abstract class Subject { //抽象方法 public abstract void Request(); }
(1.2)真实主题类RealSubject
/// <summary> /// 真实主题 /// </summary> public class RealSubject : Subject { /// <summary> /// 重写父类的方法 /// </summary> public override void Request() { Console.WriteLine("真实的主题"); } }
(1.3)代理Proxy
在代理类中我们可以根据实际情况进行一些处理,下边的begin_Request()和end_Request()就是一个预留
/// <summary> /// 代理类 /// </summary> public class Proxy : Subject { //持有的主题的对象 private RealSubject _subject = null; public override void Request() { //0.1请求开始 this.begin_Request(); //0.2处理 if (_subject == null) _subject = new RealSubject(); _subject.Request(); //0.3善后处理 this.end_Request(); } #region 加入我们自己的逻辑处理方法 /// <summary> /// 开始请求 /// </summary> public void begin_Request() { Console.WriteLine("..begin request"); } /// <summary> /// 结束请求 /// </summary> public void end_Request() { Console.WriteLine("..end request"); } #endregion }
(1.4)客户端调用
class Program { static void Main(string[] args) { //代理类 Proxy proxy = new Proxy(); proxy.Request(); Console.ReadKey(); } }
(1.5)测试结果