C# 设计模式之 代理模式(静态)

发布一下 0 0

引子:

项目经理老王说:“小王给我下楼买包烟,要华子“,小王(新人)就给项目经理老王买回来了一包华子,顺便自己还去买了一包芙蓉王。

这个场景中,小王就是代理,老王是代理人(客户端);

概念:

代理模式是一种结构型设计模式, 让你能够提供对象的替代品或其占位符。 代理控制着对于原对象的访问, 并允许在将请求提交给对象前后进行一些处理。

类图:


C# 设计模式之 代理模式(静态)

上面的类图可以看到:代理人(RealSubject),跟代理(Proxy)都实现了Suject(主题)接口,都实现了接口的功能,代理持有了代理人的实例(代理人授权给了代理去做事),还可以实现一些别的拓展方法。

开始撸码实现一个简单的代理模式:

定义买烟接口:

/// <summary>/// 接口 代理的主题/// </summary>public interface ISubject{  void BuyCigarate();}

定义代理人类:

/// <summary>/// 代理人/// </summary>public class Manager : ISubject{  public void BuyCigarate()  {    Console.WriteLine("项目经理:小王给我去买保华子");  }}

定义代理:

/// <summary>/// 代理类/// </summary>public class DeveloperProxy : ISubject{  private Manager _manager;  public DeveloperProxy( Manager manager)  {    Console.WriteLine("我是项目经理(月薪7W).........的代理,随时听候吩咐!!!");    _manager = manager;  }  public void BuyCigarate()  {    _manager.BuyCigarate(); //实现的也是代理人的方法    Console.WriteLine("小王(代理):收到!马上处理");    Console.WriteLine("小王(代理):烟买回来了,一起到天台抽一口?");    BuyFrw();  }  public void BuyFrw()  {    Console.WriteLine("我也买了一包芙蓉王");  }}

测试:

static void Main(string[] args){  //定义代理人  Manager manager = new Manager();  //定义代理  DeveloperProxy proxy = new DeveloperProxy(manager);  //执行代理的动作  proxy.BuyCigarate();  Console.Read();}

测试结果:

我是项目经理(月薪7W).........的代理,随时听候吩咐!!!项目经理:小王给我去买保华子小王(代理):收到!马上处理小王(代理):烟买回来了,一起到天台抽一口?我也买了一包芙蓉王

上面的场景中,重点是小王做为代理帮老王做了吩咐的事情,自己也买了一包烟。

我们使用的nginx中的方向代理就是代理模式的一种应用场景。用户去请求服务器资源的时候,并不需要去访问具体服务器,让nginx代理来处理请求(具体请求是服务器来处理)并返回请求结果;


分享总结,会让自己已知的事物有更加深的认识。

话说,如果你是小王,你会去帮老王买烟吗?

版权声明:内容来源于互联网和用户投稿 如有侵权请联系删除

本文地址:http://0561fc.cn/205312.html