我已经找到了很好的资源,告诉我Java API中的MouseAdapter没有使用适配器模式。问题是:MouseAdapter是否实现了一种模式?
我知道它的用途:它为MouseListener接口创建了一个具体类,因此您可以扩展该类以避免实现不必要的模式。
我当时认为它可能是Bridge模式的一部分。我不确定,因为我不熟悉这种模式。
答案 0 :(得分:4)
很棒的问题!
我可以看到为什么一个响应者声明Null Object因为存在一些概念上的相似之处。我真的很喜欢这个答案。但是在Null Object中,它实际上是要删除不断检查null的需要,如:
if (obj != null)
obj.DoSomething();
您可以通过创建一个使用no-op实现覆盖DoSomething()的存根对象来完成此操作。与我不同的是,目的明确不同。如果我看到一个Null对象(在名称或docos中),我希望它应该使用no-op实现所有操作。我永远不会指望它继承一个Null对象。事实上,在我看来,它们应该被封存。
我认为适配器不是那么糟糕,因为适配器的目的是将不兼容或不合适的接口调整(更改)为可以使用或使用的格式。这绝对是MouseAdapter的意图。 MouseListener接口确实很麻烦,MouseAdapter正在将该接口转换为更容易消费的东西。
它适应什么?我会说模板方法模式。特别是,它将接口实现方法转换为“钩子操作”。钩子操作是一种在子类中被覆盖的方法,通常实现为无操作,并由基类调用。 (从概念上讲,我猜它是一个Null方法而不是Null对象)。它们作为扩展点存在,这就是它们在这种情况下的使用方式。
答案 1 :(得分:2)
Null对象模式应该适合账单。它基本上意味着对象具有其主体为空的方法。 MouseAdapter和WindowAdapter都遵循这种模式,方法中没有可执行代码。
答案 2 :(得分:1)
我认为它不使用设计模式。如果你看一下strategy design pattern的直接已知子类,那么最接近的可能是mouse adapter,但这对我来说感觉不对(<+ p>