假设我想实现为数据库连接提供 Connection
的类。我可以用下面给出的两个不同的代码片段来实现同样的事情。
方法一:
class DBConnection1 {
private static DBConnection1 instance = new DBConnection1();
private DBConnection1(){
}
public static DBConnection1 getInstance(){
return instance;
}
public Connection getConnection(){
Connection connection = null;
//do my stuff to init the connection
return connection;
}
}
方法二:
class DBConnection2 {
public static Connection getConnection(){
Connection connection = null;
//do my stuff to init the connection
return connection;
}
}
并访问上述方法,如
class TestConnection{
public static void main(String[] args) {
//using method 1
Connection connection1 = DBConnection1.getInstance().getConnection();
//using method 1
Connection connection2 = DBConnection2.getConnection();
}
}
我毫不怀疑哪个更好,为什么?那里有什么区别?
最佳答案
在非常高的级别上,您可能会感到困惑,并且看起来他们都在执行相同的任务。但是有很多不同。我是笼统地回答这个问题。您可以根据您的应用程序(类型)了解优势。
Singleton 只将公共(public)数据存储在一个地方。它将大大简化程序的架构并帮助您重用代码。单例允许您更轻松地控制对象状态。这改善了代码共享和代码质量。因此它变得更容易维护。如果您想覆盖它,Singleton 允许您覆盖它。延迟加载可以使用单例类来完成。单例更面向对象。静态对象存储在堆栈中,而单例对象存储在堆中。
与 Singleton 相比,静态类很难测试(Singleton 很容易模拟。例如,在使用 JUnit 测试时)。如果您正在使用 Spring 或任何此类依赖注入(inject)框架,则最好使用单例而不是静态。静态类不能传递给方法或被继承。由于共享数据,静态类可能会在并发环境中产生问题。最好不要在静态类中维护状态。您可以在这里引用更多关于 Singleton 的信息 http://en.wikipedia.org/wiki/Singleton_pattern或 http://www.tutorialspoint.com/java/java_using_singleton.htm .
我看到静态类的唯一优势是速度更快。仅当必须将一组函数放在一起时才使用静态。
关于java - 单例和静态方法Java之间的混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30276494/