回答
全静态类通常用于共享实用程序方法,这些共享实用程序方法在逻辑上组合在一起,但不共享它们之间的状态(字段)。
单身是更好,如果:
- 你可能想用不同的行为不同的对象来发挥这种作用。
- 对象需要实现一个接口(如共享
ActionListener
)
(说这句话的另一种方法:如果你需要多态,你的单身必须是一个对象,而不是一类)
对于我:Singleton is an anti-pattern,只应该使用,如果有一个强有力的理由,还有一个类只有公共静态变量是不可接受的在我看来,这个声音不是真正的对象对我来说。您可以使用Dependency Injection,好处是可测试性,并且您可以避免重新创建单例(如果您不使用enum)。
这看起来像:
public class SharedObject{
// content
}
public class Worker{
private final SharedObject sharedObject;
public Worker(SharedObject sharedObject){
this.sharedObject = sharedObject;
}
}
用这种方式,你也看到,这里的物品从何而来,你可以使用Mocktio easyly嘲笑共享对象。它迫使你构造你的代码以进行简单的测试,同时它将以更模块化的方向发展。
有些情况下,静态类比单例更有意义。你可以看到java.lang.Math的例子。这不是单身 - 。它只是为我们提供了一堆静态方法。
如果您的类没有维护任何状态,并且只提供对某些方法的全局访问,那么您应该使用静态类,因为静态方法比编译时的静态绑定更快。请记住,不能对静态方法使用多态,因为静态方法不能被覆盖。
如果要维护对象的状态,则必须使用单例而不是静态方法。当您需要具有完整OO功能的类时,选择Singleton,而如果您只需要存储一堆静态方法一起使用,比使用静态类。
你可以有一个详细的描述在这里 了解更多:http://javarevisited.blogspot.com/2013/03/difference-between-singleton-pattern-vs-static-class-java.html#ixzz2iNE3rW4i
我喜欢静态的方法对它们是无状态类,就像Math
或System
类和单为副versa->为有状态类,像FacesContext
。
优选的不可遗传的和不可实例化的类具有静态方法。例如:只有当你想保持一些状态,类似于应用范围
public final class Constants {
private Constants() {
// non-public constructor
}
public static final Pattern ID_PATTERN = Pattern.compile("^\\d{4,10}$");
public static final Locale DEFAULT_LOCALE = new Locale("en", "US");
...
}
使用单。但是,如果您想要一个干净设计,则必须是两个类。
- 1. 单身人士班级与静态会员班级
- 2. 私人会员单身人士班
- 3. 带有静态成员实例的单身人士
- 4. 带初始化静态成员的单身人士
- 5. 如何在dll中使用静态成员和单身人士?
- 6. Tomcat网络应用程序中的单身人士和班级装载员
- 7. 由Singleton包装的单身人士或非单身人士
- 8. Laravel 4 - 创建的单身人士班级未找到
- 9. 班级成员与Vala中的静态成员
- 10. 单身人士记忆体管理(多个班级)
- 11. 具有可变成员的单身人士对象
- 12. iOS:有一个干净的代码,使用静态类或单身人士
- 13. 访问单身般的静态成员
- 14. 班级中的私人成员
- 15. 访问班级的私人成员
- 16. 在iOS中的静态库中的单身人士
- 17. 我的单身人士模板真的是单身人士吗?
- 18. 单身人士和静态类c的实际使用情况#
- 19. 为什么java.lang.Runtime是单身人士?单身人士的要求?
- 20. 班级范围和私人成员?
- 21. 线程安全使用单身人士的成员
- 22. 将单身人士的班级转换为上下文的类型
- 23. 给予班级成员对其他班级成员的引用
- 24. PHP单身人士与静态后期绑定
- 25. 在NDK静态库中创建单身人士
- 26. 可以接受外部班级管理返回单身人士的工厂吗?
- 27. C#:单身人士使用单身人士
- 28. 如何说服团队成员不要使用单身人士?
- 29. 单身人士课程成员正在发布?
- 30. 无状态单身人士和并发
Java是一种面向对象的编程语言。 –
不,您的要求根本不明确。更好的是什么意思?出于什么目的? –
您提出的问题不完整。你需要获得更多的理论知识来决定单例还是静态方法更好。研究模式设计以获得更好。没有任何答案对您的问题足够好。 –