在开发java独立应用程序时,一些开发人员倾向于扩展JFrame类和实现(实现)一些actionlistener接口。它是否违反了oops和抽象中的泛化概念。它是否也违反了单一责任原则。
[编辑]通过违反oops中的泛化概念,我的意思是“is-a”关系变得无效。 继承一个更改为扩展类
的类答案 0 :(得分:3)
这种经常出现的反模式会带来一些问题:
class Application extends JFrame implements ActionListener {}
鉴于preference for composition over inheritance,Application
可能拥有 JFrame
,但它只能扩展 {{ 1}}覆盖其现有功能。
以这种方式实现接口可以导致leaking this
in a constructor。这加剧了确保在event dispatch thread上仅构建和操作Swing GUI对象的问题。
关于generalization,JFrame
是JFrame
的专精,用作top-level container。请勿将containment hierarchy与class hierarchy混淆。
关于single responsibility,Window
API显示了连贯的推导,尽管Swing的history和cross-platform抽象。
实施控制界面(例如JFrame
)可能对self-contained example很方便,但复杂的应用程序可能需要多个controller。检查使用jmapviewer的示例here。另请参阅Why CS teachers should stop teaching Java applets。
答案 1 :(得分:1)
你的问题有点令人困惑,难以理解,因为你使用的是奇怪的术语。这些句子是正确的,意思是:
这些句子不合适,不清楚:
特别是没有代码,我只能猜出你在问什么,但我还是试着回答: