为什么MouseAdapter是一个适配器?

名称(和javadocs)暗示MouseAdapter是一个适配器(设计模式)。 但我不认为它是这样的 - 它至少对乍看起来什么都不适应

发生的惟一改变是您可以将MouseAdapter的实例MouseAdapter给期望任一接口的任何方法。 所以,你可以使用只有MouseMotionListenerMouseListener实例。 但是没有“翻译”发生。 它不符合GoF的UML - 在“类适配器”版本中,预计对一个方法的调用将调用来自适配器的方法。

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


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

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

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

所以,我不认为MouseAdapter中的Adapter与相应的设计模式有关。 或者,即使是这样,开发者也没有统一的语言来表达设计模式,这使得很难理解真实的意义。


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

超类可以提供一个完整的实现,这是一个默认或最小的实现。


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

    someObject.addMouseListener(new MouseAdapter() {
        public void mouseClicked(MouseEvent e) {
            ...//Event listener implementation goes here...
        }
    });
链接地址: http://www.djcxy.com/p/50219.html

上一篇: Why is MouseAdapter an adapter?

下一篇: Field.get(obj) returns all nulls on injected CDI managed beans, while manually invoking getters return correct values