名称(和javadocs)暗示MouseAdapter
是适配器(设计模式)。但我并没有这样认为 - 至少在第一眼看来它并没有适应任何东西
唯一适应的是您可以将MouseAdapter
的实例传递给任何需要其中任何一个接口的方法。因此,您可以使用仅MouseListener
预期的MouseMotionListener
实例。但是没有“翻译”发生。并且它不符合GoF的UML - 在“类适配器”版本中,预期对一个方法的调用会调用来自适配器的方法。
那么,这是一个适配器(设计模式),还是只是一个引起混淆的随机名称?
答案 0 :(得分:13)
MouseAdapter
首次出现在Feb 1997中发布的Java 1.1中。这意味着它是在1996年(或1995年?)的某个时候开发的。
UML(草案中)是completed by 1997。
关于设计模式的第一本GoF书是published in 1995。
所以,我不认为MouseAdapter
中的 Adapter 与相应的设计模式有任何关系。或者,即使它确实如此,开发人员也没有统一的语言来表达设计模式,这使得很难理解真正的意义。
答案 1 :(得分:5)
是的,它不是GoF模式意义上的适配器,因为它不适应任何东西。 它可以被认为是抽象类模式[woolf97]:
的一个实例超类可以提供默认的完整实现 或最小化的实施。
答案 2 :(得分:1)
正如其他答案所说,它不是GoF适配器模式。它的主要目的是通过在MouseListener
(通常只是MouseMotionListener
)中覆盖所需的方法来实现MouseAdapter
(或mouseClicked()
)而不是创建所有其他方法的无意义的空实现。因此,它可以节省大量不必要的代码,尤其是在使用匿名事件侦听器时。例如(取自here)
someObject.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
...//Event listener implementation goes here...
}
});
答案 3 :(得分:0)
我知道这个问题已经有了一个公认的答案,但是这里也提出了同样的问题:
MouseAdapter: which pattern does it use?
查看更多deatils,但MouseAdapter 将非常有用的MouseListener接口改编为更可用的形式。