26

据我了解,适配器代理模式都使两个不同/不同的类/对象相互兼容以进行通信。它们都是结构模式。我得到他们两个彼此非常相似。

有人能解释一下究竟是什么让它们不同吗?

编辑:我经历了这个问题。但我宁愿在适配器和代理之间进行仔细比较。

4

3 回答 3

33

适配器:

  1. 它允许两个不相关的接口通过不同的对象一起工作,可能扮演相同的角色。
  2. 它修改了原来的界面。

UML图:

在此处输入图像描述

您可以在这篇 SE 帖子中通过工作代码示例找到有关此模式的更多详细信息:

桥接模式和适配器模式之间的区别

代理人:

代理为另一个对象提供代理或占位符以控制对其的访问。

UML图:

在此处输入图像描述

代理模式适用的常见情况。

  1. 虚拟代理是“创建昂贵”对象的占位符。真实对象仅在客户端首次请求/访问对象时创建。
  2. 远程代理为驻留在不同地址空间中的对象提供本地代表。这就是 RPC 和 CORBA 中的“存根”代码所提供的。
  3. 保护代理控制对敏感主对象的访问。“代理”对象在转发请求之前检查调用者是否具有所需的访问权限。
  4. 智能代理提供对某些对象的复杂访问,例如跟踪对对象的引用数量并在达到某个数量时拒绝访问,以及按需将对象从数据库加载到内存中

对于工作代码,请查看关于 Proxy的教程点文章。

主要区别:

  1. 适配器为其主题提供了不同的接口。Proxy提供相同的接口
  2. 适配器旨在更改现有对象的接口

您可以在代理适配器文章的来源制作文章中找到有关这些模式的更多详细信息。

其他有用的文章:dzone代理

于 2016-06-08T06:16:54.410 回答
4

这里

适配器为其主题提供了不同的接口。代理提供相同的接口。

您可能会认为适配器应该使一个东西适合另一个如果直接连接则不兼容的东西。例如,当您出国旅行并需要电源插座适配器时。

现在 Proxy 是相同接口的对象,并且可能是相同的基类(或子类)。它只是“假装”成为(并且表现得像)实际对象,而是将实际行为(计算、处理、数据访问等)转发给底层的引用对象。

外推到电气类比,客户端可以看到适配器的使用——也就是说,客户端“知道”正在使用适配器——而代理的使用可能更经常被隐藏,或者“透明的”——客户端认为正在使用一个实际的对象,但它只是一个代理。

于 2016-06-08T03:57:06.853 回答
1

适配器模式和代理模式的区别

适配器模式

  1. 印度移动充电器 (CLIENT) 不适合美国配电板 (SERVER)。
  2. 您需要使用适配器,以便印度移动充电器 (CLIENT) 可以安装在美国开关板 (SERVER) 中。
  3. 从第 2 点可以看出,CLIENT 直接联系适配器。然后适配器联系服务器。

代理模式

  • 在适配器模式中,客户端直接联系适配器。它不联系服务器。
  • 在代理模式中,代理和服务器实现相同的接口。客户端将调用相同的接口。

通过代码理解

class client{
    public void main(){
      //proxy pattern
      IServer iserver = new proxy();
      iserver.invoke();

      //adapter pattern
      IAdapter iadapter = new adapter();
      iserver.iadapter();
    }
}

class server implements IServer{
    public void invoke(){}
}

class proxy implments IServer{
  public void invoke(){}
}

class adapter implements IAdapter{
  public void invoke(){}
}

参考:适配器模式和代理模式的区别

于 2018-01-25T11:47:57.833 回答