gpt4 book ai didi

java - 单例和静态方法Java之间的混淆

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:54:50 25 4
gpt4 key购买 nike

假设我想实现为数据库连接提供 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_patternhttp://www.tutorialspoint.com/java/java_using_singleton.htm .

我看到静态类的唯一优势是速度更快。仅当必须将一组函数放在一起时才使用静态。

关于java - 单例和静态方法Java之间的混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30276494/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com