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

引子:

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

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

虽然上面的栗子有些牵强,但是能更好理解代理模式;

概念:

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

类图:


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

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

定义买烟接口:

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

定义代理人类(真实主题):

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

定义代理(代理主题):

/// 
/// 代理类
/// 
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代理来处理请求(具体请求是服务器来处理)并返回请求结果;





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

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

展开阅读全文

页面更新:2024-06-01

标签:小王   天台   模式   代理人   项目经理   静态   接口   定义   对象   服务器   主题

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号

Top