织梦CMS - 轻松建站从此开始!

香烟网-健康养生信息网

当前位置: 香烟网 > 香烟信息 >
KMAA987

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

时间:2023-04-04 16:25来源:网络整理 作者:佚名 点击:
引子:项目经理老王说:“小王给我下楼买包烟,要华子“,小王(新人)就给项目经理老王买回来了一包华子,顺便自己还去买了一包芙蓉王。

引子:

项目经理老王说:“小王给我下楼买包烟,要华子“,小王(新人)就给项目经理老王买回来了一包华子香烟如何避免18级代理问题,顺便自己还去买了一包芙蓉王。

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

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

概念:

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

类图:

如何避免隐藏终端问题_香烟批发代理货到付款_香烟如何避免18级代理问题

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

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

定义买烟接口:

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

香烟批发代理货到付款_香烟如何避免18级代理问题_如何避免隐藏终端问题

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

/// 
/// 代理人
/// 
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("我也买了一包芙蓉王");
  }
}

如何避免隐藏终端问题_香烟批发代理货到付款_香烟如何避免18级代理问题

测试:

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

测试结果:

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

上面的场景中,重点是小王做为代理帮老王做了吩咐的事情香烟如何避免18级代理问题,自己也买了一包烟。

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

香烟批发代理货到付款_香烟如何避免18级代理问题_如何避免隐藏终端问题

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

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

(责任编辑:admin)
织梦二维码生成器
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片