为什么MouseAdapter是适配器?

名称(和javadocs)暗示MouseAdapter是一个适配器(设计模式)。 但我并没有这样看待它 – 至少乍一看它并没有适应任何东西

唯一适应的是您可以将MouseAdapter的实例MouseAdapter给任何需要其中一个接口的方法。 因此,您可以使用只需要MouseMotionListenerMouseListener实例。 但是没有“翻译”发生。 并且它不符合GoF的UML – 在“类适配器”版本中,期望对一个方法的调用从适配器调用方法。

那么,这是一个适配器(设计模式),还是只是一个引起混淆的随机名称?

MouseAdapter首次出现在1997年2月发布的Java 1.1中。 这意味着它是在1996年(或1995年)的某个时候开发的。

UML(草案中)于1997年完成 。

关于设计模式的第一本GoF书籍于1995年出版 。

所以,我不认为MouseAdapter中的Adapter与相应的设计模式有任何关系。 或者,即使它确实如此,开发人员也没有统一的语言来表达设计模式,这使得很难理解真正的意义。

是的,它不是GoF模式意义上的适配器,因为它不适应任何东西。 它可以被认为是抽象类模式的一个实例[ woolf97 ]:

超类可以提供默认或最小实现的完整实现。

正如其他答案所说,它不是GoF适配器模式。 它的主要目的是通过覆盖MouseAdapter的所需方法(通常只是mouseClicked() )来实现MouseListener (或MouseMotionListener ),而不必创建所有其他方法的无意义的空实现。 因此,它可以节省大量不必要的代码,尤其是在使用匿名事件侦听器时。 例如(取自这里 )

  someObject.addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent e) { ...//Event listener implementation goes here... } }); 

我知道这个问题已经有了一个公认的答案,但是这里也提到了同样的问题:

MouseAdapter:它使用哪种模式?

在那里查看更多deatils,但MouseAdapter 非常简单的MouseListener接口调整为更实用的forms。