【问题标题】:Adapter Design Pattern with one Adaptee class inheriting the other?适配器设计模式,一个 Adaptee 类继承另一个?
【发布时间】:2020-09-10 07:32:23
【问题描述】:

我最近遇到了这个问题,我只是好奇我的答案是否正确,如果不是,我在哪里犯了错误。

我的任务:

A 类和 B 类的签名不兼容。 C类是用设计模式适配器连接A和B。

让 C 从 A 和 B 继承有什么好处?解释让 B 从 A 继承和 C 从 B 继承是否有意义。

我的回答:

让C继承A和B的好处是可以解决签名冲突,而A和B仍然可以分别实例化。

让B继承A和C继承B是没有意义的,因为如果之前引起冲突的功能从A继承到C,B必须接管A的实现,B的功能会被改变,这不是设计模式适配器的目的。

谢谢:-)

【问题讨论】:

  • 哪一类应该适应另一类?如果您希望 A 的实例作为 B 的实例工作,则 C 应该扩展 B,包装 A 的实例,实现 B 所需的接口,并调用 A 实例的适当方法。
  • 我认为任务不是关于 A 是否应该适应 B 或反之亦然(例如,您可以假设 B 应该适应 A),而是关于如果 C 继承的优势从 A 和 B 以及天气让 B 从 A 继承和 C 从 B 继承是有意义的。
  • A 和 B 仍然可以单独实例化”是什么意思?您的其余答案看起来不错。

标签: design-patterns adapter class-design ooad


【解决方案1】:

适配器模式(与所有其他 GoF 设计模式一样)具有良好记录的结构。有两种方法可以实现这种模式:

  1. 对象适配器:Adapter 类包装了Adaptee
  2. 类适配器:Adapter 类继承自 Adaptee

考虑到这一点,让我们看一下所提出问题的关键部分:

解释让 B 从 A 和 C 继承是否有意义 从 B 继承。

这样做没有意义,原因如下:

  1. 如果希望实现适配器模式,则不能将其称为 适配器模式 本身(因为 C 既不是 Object Aadapter 也不是 类适配器)
  2. 适配器模式与否,它违反了 IS-A 关系。假设A 类是AndroidB 类是Blackberry。如果B 继承A,则它违反IS-A 关系,因为Android 不是Blackberry

2. 点正是我们需要 Adapter 模式的原因。我们创建了一个BlackberryToAndroidAdapter 类,它继承自AndroidBlackberry 这不过是类适配器 模式的一个例子,在这个问题的上下文中,这是类C .

【讨论】:

    猜你喜欢
    • 2017-06-14
    • 1970-01-01
    • 1970-01-01
    • 2014-11-22
    • 1970-01-01
    • 1970-01-01
    • 2013-01-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多