我有一个接口 - “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”向我建议它是适配器模式的一个例子......但它真的吗?我认为适配器的意义在于将现有实现转换为其他实现。我不知道这是怎么回事。
如果它不是适配器模式的示例,它是什么?肯定已经确定了这样的事情。
答案 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)
你是对的,这不是适配器设计模式的一个例子,而是界面的一个简单的默认实现。我会将其重命名为DefaultEventHandler
,EmptyEventHandler
或GenericEventHandler
。
答案 2 :(得分:2)
你是对的,它不是适配器模式的一个例子,而是广泛采用的惯例,“默认为空”称为“适配器”
例如,Java UI API通常为MouseListener接口提供此类适配器。
答案 3 :(得分:2)
AWT有许多接口实现,他们称之为“适配器”,如“MouseAdapter”,“FocusAdapter”。不,它们不是适配器模式的实现。他们是便利班,我只是称他们为stubs。