适配器和代理模式之间的确切区别是什么?

时间:2016-06-08 03:38:44

标签: oop design-patterns adapter object-oriented-analysis proxy-pattern

据我所知,适配器代理模式使两个不同/不同的类/对象与每个类型/对象兼容以进行通信。它们都是结构模式。我知道他们两个都非常相似。

有人可以解释究竟是什么让他们与众不同?

编辑: 我经历了this个问题。但我更愿意在Adapter和Proxy之间进行仔细比较。

3 个答案:

答案 0 :(得分:10)

<强> 适配器:

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

    enter image description here

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

    Difference between Bridge pattern and Adapter pattern

    <强> 代理:

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

    UML图:

    enter image description here

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

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

      主要差异:

      1. 适配器为其主题提供不同的界面。代理提供相同的接口
      2. 适配器旨在更改现有对象的界面
      3. 您可以在proxyadapter文章的源代码制作文章中找到有关这些模式的更多详细信息。

        其他有用的文章:proxy来自dzone

答案 1 :(得分:2)

来自here

  

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

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

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

根据电气类比推断,客户可以看到适配器的使用 - 也就是说,客户&#34;知道&#34;正在使用适配器 - 虽然代理的使用可能更常被隐藏,或者“透明”#34; - 客户端认为正在使用实际对象,但它只是代理。

答案 2 :(得分:0)

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

ADAPTER PATTERN

  1. 印度移动充电器(CLIENT)不适用于美国开关板(SERVER)。
  2. 您需要使用适配器,以便印度移动充电器(CLIENT)可以放入美国开关板(SERVER)。
  3. 从第2点开始,您可以了解CLIENT直接联系适配器。然后适配器联系服务器。
  4. PROXY PATTERN

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

    了解代码

    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(){}
    }
    

    参考:Difference between Adapter pattern and Proxy Pattern