Java(FX) - 只允许 1 个类从单例类调用方法

标签 java methods javafx singleton

我目前正在从事一个项目,在该项目中我使用单例类来更改用户的 View 。此 DisplayManager(单例)具有 addView(View view)replaceView(View view) 等方法。但它也有一个名为 displayRootView() 的方法,它只能被调用一次(在初始化期间)并且只能由一个类调用,即扩展 Application 类的 StartUp 类。

关于如何防止使用单例的其他类调用 displayRootView() 方法有什么想法吗?

我已经考虑过 StackTrace,但这似乎并不理想。我虽然可以通过在 StartUp 类上使用标记接口(interface)来将它与其余部分分开?

如有任何建议,我们将不胜感激。

最佳答案

呃,这很难阻止某些类调用您的方法,因为它违反了一些核心 OOP 原则。该方法不应该关心调用它。这是基本的关注点分离 - 您的方法应该明确约定其作用,而不是 JVM 当时的状态。

考虑这些问题:

  • 如果子类化 StartUp 会发生什么?例如,将桌面、移动和 Web 平台分开?
  • 如何在不涉及 StartUp 的情况下对该方法进行单元测试?
  • 如果您在那里需要另一层抽象会怎样?
  • 如果以及何时添加代理(通过 AOP 或 Spring 代理)怎么办?
  • 如果您需要从 Timer 调用方法会怎样?它仍然会从 StartUp 类源调用(并且是正确的),但它不会出现在堆栈跟踪中。

以及其他此类注意事项。

抛出某种异常(如 IllegalStateException 或自定义异常),以防第二次调用该方法是绝对有效的恕我直言。

这看起来您可能希望对您的代码进行静态检查,而不是代码内或运行时检查。我不认为将自定义规则添加到 Findbugz 或 PMD 以查找方法的所有直接调用并检查调用类(如果从其他地方调用则构建失败)不会非常困难。但我认为这样的检查实际上没有用。

最后,您需要在所述类之外合法使用该方法的可能性要大得多,而不是有人在收到警告并创建适当的 Javadoc 后意外错误地使用它。

关于Java(FX) - 只允许 1 个类从单例类调用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28113690/

相关文章:

JavaFX 模块 javafx.graphics

javafx - 如何在javafx中禁用 Canvas 上drawImage的线性过滤

c# - c# 和 java 是否有相同的同步问题/概念?

java - 为什么 (null +"").equals ("null") 在 Java 中返回 true ?

java调整大小的方法

javascript - 有没有办法在警报框中显示对象的输入值?

java - 从卡牌数组中调用一张卡牌

JavaFX 从切换按钮获取坐标

java - 如何以编程方式禁用 Java LDAP JNDI LDAP API 中的证书主机名验证?

java - RMI URL 格式之间的区别