代理模式

# 分类

结构型模式

# 定义

代理模式(Proxy Pattern) 在代理模式中,一个类代表另一个类的功能。我们创建具有现有对象的对象,以便向外界提供功能接口。

代理模式分为

  • 远程代理 :也就是为一个对象在不同的地址空间提供全局代表,这样可以隐藏一个对象存在于不同地址空间的事实。
  • 虚拟代理 :是根据需要创建开销很大的对象。通过它来存放实例化需要很长时间的真实对象。
  • 安全代理 : 用来控制真实对象访问时的权限。
  • 智能指引 :是指当调用真实对象时,代理处理另一些事情。

# 意图

代理模式为其他对象提供一种代理,以控制这个对象的访问。

# 应用场景

  • 安职责来划分,通常有以下使用场景:
    • 远程代理
    • 虚拟代理
    • 保护代理
    • Cache代理
    • 防火墙代理
    • 同步化代理
    • 智能引用代理

应用实例

  • 猪八戒去找高翠兰结果是孙悟空变的。
  • 买火车票不一定在火车站买,也可以去代售点买。
  • 一张支票或银行存单是账户中资金的代理。支票在市场交易中用来代替现金,并提供对签发人账号上资金的控制。

# 角色与结构图

  • Subject:抽象主题角色 定义一个接口。
  • RealSubject:真实主题角色 实现抽象主题角色的接口。
  • Proxy:代理角色 使用实际角色完成相关功能。
  • Client:客户程序角色 使用代理实现相关功能。

下图解释了代理模式中各角色的作用

<<------------------------代理模式结构图--------------------------->>

# 示例代码

//抽象请求者
abstract class Subject{
  public abstract void Request();
}

//实际请求者
class RealSubject : subject{
  public override void Request(){
    Console.WriteLine("真实的请求");
  }
}
1
2
3
4
5
6
7
8
9
10
11
//代理
class Proxy : subject{
  RealSubject realSubject;
   
  public override void Request(){
    if(realSubject == null){
      realSubject = new RealSubject();
    }
    realSubject.request();
  }
}
1
2
3
4
5
6
7
8
9
10
11
//客户端
class Client{
  static void Main(String[] args){
   Proxy proxy = new Proxy();
   proxy.Request();

   Console.Read();
  }
}
1
2
3
4
5
6
7
8
9

# 优点

  • 职责清晰。
  • 高扩展性。
  • 智能化。

# 缺点

  • 由于在客户端和真实主题之间增加了代理对象,因此有些类的代理模式可能会造成请求的处理变慢。
  • 实现代理模式需要额外的工作,有些代理模式的实现非常复杂。

# 小结

  • 主要解决?在直接访问对象时带来的问题,比如说:要访问的对象在远程机器上,在面向对象系统中,有些对象由于某些原因,直接访问会给使用者或者系统结构带来很多麻烦,我们可以在访问此对象时加上一个对此对象的访问层。
  • 何时使用?想在访问一个类时做一些控制。
  • 如何解决?增加中间层。
  • 关键代码?实现与被代理类组合。

注意

  • 和适配器模式的区别:适配器模式主要改变所考虑对象的接口,而代理模式不能改变所处理类的接口。
  • 和装饰器模式的区别:装饰器模式为了增强功能,而代理模式是为了加以控制。

# 大结

直接与间接,人们对于复杂的软件系统常常有一种处理手法,即增加一层间接层,从而对系统获得一种更为灵活、满足特定需求的解决方案。 动机:在面向对象系统中,有些对象由于某种原因(比如对象创建的开销很大,或者某些操作需要安全控制,或者需要进程外的访问等),直接访问会给使用者、或者系统结构带来很多麻烦。 如何在不失去透明操作对象的同时来管理/控制这些特有的复杂性,增加一层间接层是软件开发中常见的解决方案。 意图:为其他对象提供一种代理以控制对这个对象的访问。

# 一句话概括

为对象提供一个代理以便控制这个对象的访问。

上次更新: 2025/03/22, 13:47:44
最近更新
01
vue3尚硅谷课件
04-26
02
Git问题集合
01-29
03
安装 Nginx 服务器
01-25
更多文章>
×
×