这真的是适配器模式的一个例子吗?

时间:2010-08-24 13:20:44

标签: java design-patterns adapter

我有一个接口 - “EventHandler” - 它声明了几种方法。

public interface EventHandler {
    void handleEvent1();

    void handleEvent2();

    void handleEvent3();

    void handleEvent4();
}

我还有一个类 - “EventHandlerAdapter” - 它实现了EventHandler。但是,它实际上并没有“实现”任何东西。关键是,如果另一个类想要实现EventHandler,而不是它的所有方法,它只需扩展 EventHandlerAdapter 并只覆盖它想要的方法。

public class EventHandlerAdapter implements EventHandler {
    public void handleEvent1() {}

    public void handleEvent2() {}

    public void handleEvent3() {}

    public void handleEvent4() {}
}

我不止一次见到过类似的东西。名称“EventHandlerAdapter”向我建议它是适配器模式的一个例子......但它真的吗?我认为适配器的意义在于将现有实现转换为其他实现。我不知道这是怎么回事。

如果它不是适配器模式的示例,它是什么?肯定已经确定了这样的事情。

4 个答案:

答案 0 :(得分:9)

不,这不是适配器模式的示例,如此处所定义:

http://en.wikipedia.org/wiki/Adapter_pattern

但是,在Java事件处理中,如您所提到的,经常使用术语适配器。尽管“Adapter”一词在两者中都是相同的,但它们并不是指相同的东西。出现在java.awt.event包中的适配器可以很容易地创建一个事件处理程序,它只处理一个方法而不必编写一堆空方法。它们只是快捷类。

Java Event API通常对这些类具有一致的命名。当存在SomeEvent事件类时,有一个SomeListener接口用于侦听事件,而SomeAdapter类用空方法实现侦听器接口。并非所有事件都包含这三个部分,但三者的命名和功能是一致的。

在您提供的示例中,我将重命名类EventAdapter以与现有Java API保持一致。

答案 1 :(得分:2)

你是对的,这不是适配器设计模式的一个例子,而是界面的一个简单的默认实现。我会将其重命名为DefaultEventHandlerEmptyEventHandlerGenericEventHandler

答案 2 :(得分:2)

你是对的,它不是适配器模式的一个例子,而是广泛采用的惯例,“默认为空”称为“适配器”

例如,Java UI API通常为MouseListener接口提供此类适配器。

答案 3 :(得分:2)

AWT有许多接口实现,他们称之为“适配器”,如“MouseAdapter”,“FocusAdapter”。不,它们不是适配器模式的实现。他们是便利班,我只是称他们为stubs