2017-05-23 93 views
2

如果我知道一个特定的类只会在我的程序中实例化一次,那么最好是使用静态方法和变量来代替那个特定的类吗?如果不是,如果只有一个该类的实例,那么使用实例方法和变量优于静态方法会带来什么好处?Java - 只有一个类的实例:使用静态方法?

+1

你*可以*使它成为'enum'。但为什么**限制自己?如果你需要两个实例,或者三个呢? –

+1

如果你真的知道它会是一个实例,那么你应该使用(Singleton)模式 –

+0

这个问题可能是有用的:https://stackoverflow.com/questions/519520/difference-between-static-class-and-singleton- pattern?noredirect = 1&lq = 1 –

回答

3

我们来讨论何时使用singletonstatic方法。前面已经讨论过这个网站,所以我在这个答案的结尾处指出了这一点。

查看此问题的一种方法是询问该类是否具有状态,是否需要进行子类化,如何进行测试,将该单例应用于依赖注入框架中,即将其注入?

如果你的回答是“yes”对任何上述,你最好使用singleton - 如果不是,那么你可以使用static方法。

但是,这两种方法在下面的链接中将更详细地讨论它们应该或不应该使用的原因。

请参阅this“为什么单身人士不好”。

请参阅this“不使用静态方法时”。

+0

埃里克Galluzzo对你连接的第二个问题的答案是太棒了。 –

4

这取决于你需要班级做什么以及将来可能需要什么。这也取决于有多少人会看到或使用此代码。如果这个代码只会被你看到和使用,比选择一个实现并且一直跟随它,那么迫使你自己切换到另一个实现,因为练习可能是照亮的。

假设你的代码会被看到或另一个程序员使用:

如果对象是,你需要在测试中模仿(如数据库连接,例如)的东西,然后它会是最好能有你的方法是实例方法,并找到一些其他的策略来确保你只有一个。 (例如,你的类将你的程序的输出写入excel文件),然后将你的类的实例传递给任何需要它们的方法一个很好的方法可以帮助你的代码更加灵活(例如,如果你以后决定要生成html输出,你所要做的就是编写一个你的excel编写器的姊妹实现,然后通过它)。

如果您几乎100%确定您的代码永远不需要被模仿(又名“模拟”),并且您永远不需要利用多态性(例如Java中的Math类),那么静态方法将可能会很好,但这是一个罕见的情况。

相关问题