gpt4 book ai didi

java - GOF 中提到的可插拔适配器

转载 作者:行者123 更新时间:2023-12-01 14:06:11 32 4
gpt4 key购买 nike

此主题的 Stackover 流相关帖子:
Post_1Post_2

上面的帖子很好,但我仍然无法回答我的困惑,因此我把它作为一个新帖子放在这里。
我的问题 基于 GOF 的 Elements of Reusable Object-Oriented Software 书籍内容关于可插拔适配器(在下面的问题后面提到),因此如果讨论/答案/评论更关注 GOF 关于可插拔适配器而不是其他的现有示例,我将不胜感激例子
Q1) 是什么意思?内置接口(interface)适配 ?
Q2) 与通常的适配器相比,可插拔接口(interface)有何特别之处?通常的适配器也会使一个接口(interface)适应另一个接口(interface)。
Q3) 即使在这两个用例中,我们也看到了提取的“窄接口(interface)”GetChildren(Node) 的两种方法和 CreateGraphicNode(Node)取决于 Node . Node是 Toolkit 的内部组件。 Node是否与GraphicNode相同,是CreateGraphicNode中传入的参数吗?仅用于填充已创建的节点对象的状态(名称、父 ID 等)?

根据 GOF(我已将几个单词/句子标记为粗体以强调与我的问题相关的内容)

ObjectWorks\Smalltalk [Par90] uses the term pluggable adapter to describe classes with built-in interface adaptation.

Consider a TreeDisplay widget that can display tree structures graphically. If this were a special-purpose widget for use in just one application, then we might require the objects that it displays to have a specific interface; that is, all must descend from a Tree abstract class. But if we wanted to make TreeDisplay more reusable (say we wanted to make it part of a toolkit of useful widgets), then that requirement would be unreasonable. Applications will define their own classes for tree structures. They shouldn't be forced to use our Tree abstract class. Different tree structures will have different interfaces.

Pluggable adapters. Let's look at three ways to implement pluggable adapters for the TreeDisplay widget described earlier, which can lay out and display a hierarchical structure automatically. The first step, which is common to all three of the implementations discussed here, is to find a "narrow" interface for Adaptee, that is, the smallest subset of operations that lets us do the adaptation. A narrow interface consisting of only a couple of operations is easier to adapt than an interface with dozens of operations. For TreeDisplay, the adaptee is any hierarchical structure. A minimalist interface might include two operations, one that defines how to present a node in the hierarchical structure graphically, and another that retrieves the node's children.



然后有两个用例
  • “窄界面”被抽象为 TreeDisplay 的一部分
    类(class)
    enter image description here
  • Narrow Interface 提取为单独的接口(interface),并在 TreeDisplay 类中组合它
    enter image description here

  • (参数化适配器还有第三种方法,但为简单起见跳过它,我想这第三种方法更具体到 Small talk)

    最佳答案

    当我们谈论适配器设计模式时,我们通常会考虑两个我们想要集成的预先存在的 API,但它们不匹配,因为它们是在不同的时间用不同的域实现的。适配器可能需要从一个 API 到另一个 API 进行大量映射,因为这两个 API 在设计时都没有考虑到这种可扩展性。

    但是如果 Target API 的设计考虑了 future 的适应性?一个 Target API 可以通过最小化假设并为 Adapter 提供最窄的接口(interface)来实现,从而简化 future Adapter 的工作。请注意,此设计需要先验规划。与适配器模式的典型用例不同,您不能在任何两个 API 之间插入可插入适配器。 Target API 必须设计为支持可插拔适配。

    Q1) 这就是 GoF 的意思。内置接口(interface)适配 :Target 中内置了一个接口(interface)API 以支持 future 的改编。

    Q2) 如前所述,这对于适配器来说是一个相对不寻常的场景,因为该模式的典型优势在于它能够处理没有共同设计的 API。

    GoF 列出了三种不同的方法来设计 Target用于适应的 API。前两个可以识别为他们的行为设计模式。

  • 模板方法
  • 战略
  • 闭包(Smalltalk 称之为 code blocks)

  • Q3) 在不深入了解 GoF 的 GUI 示例的细节的情况下,设计他们所谓的“窄界面”背后的基本思想是尽可能多地消除域特异性。在 Java 中,与域无关的 API 的起点几乎肯定是 functional interfaces。 .

    一个 Target依赖于这些接口(interface)的 API 应该比围绕特定领域方法构建的 API 更容易适应。前者允许创建可插拔适配器,而后者需要一个更典型的适配器,在 API 之间进行大量映射。

    关于java - GOF 中提到的可插拔适配器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61311594/

    32 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com