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

标签 java class static singleton

假设我想实现为数据库连接提供 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/

相关文章:

java - 从 intellij 中的 maven 项目创建 jar

java - 如何更改父类中的私有(private)字段

python - 尝试在 Python 3 中将函数作为整数返回

Java静态上下文

java - 管理同一台计算机上 Play 框架服务器的多个实例的 session 详细信息

java - 如何通过按钮更改操作栏的颜色?

c++ - 单例模式的类成员初始化失败

c++ - 如何在类中实现可选属性

java - 静态同步方法与非静态同步方法

c++ - 将静态全局变量声明为内联是否有意义?