当前位置: 首页 > 知识库问答 >
问题:

java.awt.Event包中适配器模式的混淆使用和对接口隔离原则(ISP)的违反

常宸
2023-03-14

java.awt.event包中适配器patttern的用法让我感到困惑。首先,它似乎明显违反了接口隔离原则(ISP)。

与MouseMotionAdapter类似,类实现MouseMotionListener,但为两个重写的方法提供“无”实现。

这正是ISP违规的原因?按照ISP的说法,MouseMotionListener会被分成两个独立的接口,一个用于MoseDlold和moveMoved行为?

也许以这种方式拆分接口会使接口的数量螺旋上升,也会使编码变得更不优雅,因为每个实现类都需要实现大量的接口。

如果我的论点是正确的,就需要一些澄清吗?

共有1个答案

阴飞星
2023-03-14

这并不违反ISP。

简短版本:您只考虑系统中编写处理代码的部分。您不是在考虑事件是在哪里生成的(都在同一个地方,鼠标监视代码),也不是在考虑为这些事件注册的代码。

长版本:想想mouseevent是如何生成的。Java有一个类来监视鼠标activity,最终是在本机级别上,并相应地生成事件。所有mouselistener都在一个侦听器多点链中。如果您想要侦听多种类型的鼠标事件,您必须为您的侦听器对每种鼠标事件进行单独的注册调用。你必须是每一种多播链的一部分。然后,生成这些MouseEvent的所有类都必须确保事件中继到适当的侦听器事件类型,这意味着对于每种类型的事件都必须有一个新的事件Queue--除非您想要有大的InstanceOf链。

或者,您可以将它们统一到一个mouselistener接口中,当发生您不关心的事件时,您的类什么也不做。如果您不能扩展MouseAdapter类,这会增加一小部分额外代码,如果可以,则不会增加任何代码。系统其余部分的收益超过了那些少量额外的{}方法

 类似资料:
  • 前言 本章我们要讲解的是S.O.L.I.D五大原则JavaScript语言实现的第4篇,接口隔离原则ISP(The Interface Segregation Principle)。 英文原文:http://freshbrewedcode.com/derekgreer/2012/01/08/solid-javascript-the-interface-segregation-principle/

  • 本文向大家介绍PHP面向对象五大原则之接口隔离原则(ISP)详解,包括了PHP面向对象五大原则之接口隔离原则(ISP)详解的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了PHP面向对象五大原则之接口隔离原则(ISP)。分享给大家供大家参考,具体如下: 设计应用程序的时候,如果一个模块包含多个子模块,那么我们应该小心对模块做出抽象。设想该模块由一个类实现,我们可以把系统抽象成一个接口。但是要

  • 简介 接口隔离原则(英语:interface-segregation principles, 缩写:ISP)指明没有客户(client)应该被迫依赖于它不使用方法。接口隔离原则(ISP)拆分非常庞大臃肿的接口成为更小的和更具体的接口,这样客户将会只需要知道他们感兴趣的方法。这种缩小的接口也被称为角色接口(role interfaces)。接口隔离原则(ISP)的目的是系统解开耦合,从而容易重构,更

  • 接口隔离原则定义如下: 接口隔离原则(Interface  Segregation Principle, ISP):使用多个专门的接口,而不使用单一的总接口,即客户端不应该依赖那些它不需要的接口。 根据接口隔离原则,当一个接口太大时,我们需要将它分割成一些更细小的接口,使用该接口的客户端仅需知道与之相关的方法即可。每一个接口应该承担一种相对独立的角色,不干不该干的事,该干的事都要干。这里的“接口”

  • 本文向大家介绍深入理解JavaScript系列(21):S.O.L.I.D五大原则之接口隔离原则ISP详解,包括了深入理解JavaScript系列(21):S.O.L.I.D五大原则之接口隔离原则ISP详解的使用技巧和注意事项,需要的朋友参考一下 前言 本章我们要讲解的是S.O.L.I.D五大原则JavaScript语言实现的第4篇,接口隔离原则ISP(The Interface Segregat

  • 根据JavaAPI Scanner使用分隔符将整个输入分解为标记。我正在尝试理解标记和分隔符。我正在做这个程序,遇到了一个混乱 当我使用输入时,我得到以下输出。 我可以理解这个输出,因为分隔符之间的标记长度为零,因此所有标记都为零,但当我使用默认分隔符并将输入作为 <代码>\uuuuuuuaaa\n- 为此,我得到的输出为 我无法理解。我给了5个空格,所以它们之间应该有4个长度为0的标记。为什么不