为什么MouseAdapter是适配器?
名称(和javadocs)暗示MouseAdapter
是一个适配器(设计模式)。 但我并没有这样看待它 – 至少乍一看它并没有适应任何东西
唯一适应的是您可以将MouseAdapter
的实例MouseAdapter
给任何需要其中一个接口的方法。 因此,您可以使用只需要MouseMotionListener
的MouseListener
实例。 但是没有“翻译”发生。 并且它不符合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。