【问题标题】:create 1 static object or a class with static methods创建 1 个静态对象或具有静态方法的类
【发布时间】:2017-10-08 20:59:13
【问题描述】:

我有一个 GUI 类和 Logic 类, 哪个是更好的选择:

  1. 将逻辑类方法设为静态并从 gui 类访问它们LogicClass.method()

  2. 使逻辑类有规律,并从此逻辑类中生成 1 个静态对象

    private static LogicClass logic;

  3. 使它成为非静态的,这有点问题,因为我想从 GuiClass 中的 Main 函数访问一些方法,所以它必须是静态的(我可以通过构造函数访问它们,但我不知道是否没关系,比如连接服务器)。

【问题讨论】:

  • 尽可能不要使用静态上下文。首选 DI 选项(选项 3)。
  • 您能详细说明一下吗?你为什么这么反对?谢谢
  • Java GUI architecture for larger project 的可能重复项;见item 1。对于example
  • 代替静态使用:private LogicClass logic = new LogicClass();

标签: java swing user-interface static


【解决方案1】:

最好避免静态的东西,因为迟早你会想要分离不同的东西,或者拥有多个实例,然后你将面临可怕的重构。

这就像盐和水。将两者混合起来很容易,但将它们分开则要困难得多。

我建议你将所有东西都设为非静态的。只需使用“新”就可以了。你可能需要传递一些额外的参数,或者引入一些额外的字段,但从长远来看,它会让你的代码变得更好。只有当你事先知道一个类的实例永远不会超过一个时,才选择“单例”模式(可以通过静态字段+私有构造函数的组合来实现)。

【讨论】:

  • 好的,我理解,但是例如像按钮这样的 gui 组件,它们不应该是静态的吗?另外,如果它不是静态的,我应该如何从主线程启动该类?
  • 查看控制反转和依赖注入设计模式,了解如何处理这些问题的方法。
  • 不,您不应该将它们设为静态。使用new 创建该类的实例,然后您可以在其上调用非静态方法。查看 Swing tutorial 并查看 ButtonDemo.java 以获取完整示例。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-04-19
  • 1970-01-01
  • 2015-10-07
  • 2018-04-20
  • 1970-01-01
  • 1970-01-01
  • 2015-06-26
相关资源
最近更新 更多