我正在开发一个应用程序,我需要创建一个对象,多个类必须访问和修改该对象。如何查看其他类对象最近所做的更改以及如何通过所有类集中访问该对象,而不将该对象作为参数传递给所有类?
我正在创建一个Apache POI文档,我在其中添加了多个表,多个页眉/页脚和段落。我只想在我的应用程序中出现一个XWPFDocument
对象。
我们可以实现任何设计模式吗?
答案 0 :(得分:6)
singleton design pattern会工作 - 但不是非常干净;你最终得到了全局静态,很难跟踪和难以测试。这些天它通常被认为是一种反模式。有一些非常的情况仍然有意义,但我尽量避免它。
更好的方法是使用dependency injection:使每个需要其中一个对象的类声明该类型的构造函数参数(或者可能具有可设置的属性)。每个类都不应过多关注对象的共享或其他方式(除了意识到可以共享)。然后由初始化应用程序的代码决定应该共享哪些对象。
Java可以使用各种依赖注入框架,包括Guice和Spring。这些框架的想法是在适当的配置下自动连接应用程序中的所有依赖项。
答案 1 :(得分:3)
这有Singleton Pattern,它为应用程序创建一个实例,并且无需传递即可共享。
但这不是最好的选择。
为什么这是一个糟糕的选择?
优于Singleton Pattern是一个应用程序范围的单个实例
为应用程序创建单个对象,并使用某个上下文对象共享它。有关详细信息,请参阅Misko in his guide to testable code
单个实例而不是单例模式
它代表一个应用程序范围的单个实例,不会通过静态实例字段强制其单一性。
为什么单身人士难以测试?
reset()
或setForTest(…)
等变更方法,因为您需要在测试期间更改实例。如果您在测试后忘记重置Singleton,以后的使用将使用陈旧的底层实例,并且可能以难以调试的方式失败。