- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
此主题的 Stackover 流相关帖子:
Post_1和 Post_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.
最佳答案
当我们谈论适配器设计模式时,我们通常会考虑两个我们想要集成的预先存在的 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。前两个可以识别为他们的行为设计模式。
Target
依赖于这些接口(interface)的 API 应该比围绕特定领域方法构建的 API 更容易适应。前者允许创建可插拔适配器,而后者需要一个更典型的适配器,在 API 之间进行大量映射。
关于java - GOF 中提到的可插拔适配器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61311594/
我是一名优秀的程序员,十分优秀!