gpt4 book ai didi

java - 我怎样才能避免将顶级组件的单个实例传递给我的所有子类

转载 作者:行者123 更新时间:2023-11-30 11:46:27 24 4
gpt4 key购买 nike

所以我一直在尝试了解如何最好地构建我的代码,因为我有一种直觉,即必须有更好的方法来实现我想要的,而无需将单个对象传递给项目。

我正在处理的项目有一个扩展 JRootPane 的类 RhythmWheel。然后构造函数继续创建构成 RhythmWheel 的所有组件。例如,它创建了一个 ControlPanel 的实例(它扩展了 JPanel)并将其添加到自身。

然而,ControlsPanel 需要了解 RhythmWheels 中定义的大量信息,例如当前选择的轮子数量。目前,ControlsPanel 的构造函数将 RhythmWheel 作为参数,然后保留对它的引用。它将此用于组件 JFileChooser 应该作为其父级的组件,以及作为将应用程序的相关状态写入 XML 文件的函数的参数。

在我看来,我在这么多类中传递一个主要组件似乎是错误的。我想到了设计模式,并认为单例可能是解决这个问题的方法。但是我已经读过很多次单例是邪恶的并且是一种反模式。我想 MVC 模式可能会有所帮助,但我不确定我将如何在 Swing 中实现它。最近,我发现依赖注入(inject)是一种可能的解决方案。

对于我应该做什么,或者我是否应该做任何事情,我有点迷茫。如果您想浏览一下我正在处理的代码,可以在 https://github.com/vamega/RhythmWheels 查看。所以任何关于如何进行的建议都会很棒。

最佳答案

如果一切都需要引用 RhythmWheel 那么听起来 RhythmWheel 非常复杂。也许您可以将 RhythmWheel 分解为一组组件(希望如此,因为 GUI 应该反射(reflect)逻辑结构)对应于 GUI 的特定部分?

此外,为什么所有 GUI 组件都保留对 RhythmWheel(或适当的子组件,如果您按上述重构)的引用?我没有做过多少 spring 编程,但我认为这个想法是围绕 observer pattern 构建事物。 .在这种情况下,gui 组件应该将自己注册为 wheel 组件的观察者,以便它们可以在 wheel 更改时更新。

是的,这就是 mvc。车轮组件构成您的模型; gui 是您的 View 。不太清楚的是 Controller 是什么。我怀疑是高级轮。

所以,总结一下:

  • 轮子由子组件组成
  • 轮子具有反射(reflect)您可以对它“做什么”的高级方法
  • 轮子的高级方法是 View 中的操作所调用的方法
  • wheel 的高级方法对 wheel 的子组件进行更改
  • 轮子的子组件,当它们发生变化时,通知模型进行更新

只有 View 的输入部分需要引用轮子;显示部分是通过在 wheel 子组件上注册的回调触发的。

(直接回答最初的问题,我没有看到绕过一个轮子实例有什么不好,但正如我上面所建议的,当它变得“更低”时,将它“分割”成不同的组件可能会更好"进入 GUI)。

关于java - 我怎样才能避免将顶级组件的单个实例传递给我的所有子类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9747568/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com