任何人都可以在下面解释嵌套静态接口的用法

时间:2019-05-30 02:37:59

标签: java jdbc log4j2

我试图使用jdbc appender中的log4j2将信息记录到数据库。我碰到了这个类来创建连接。

public class ConnectionFactory {
    //couldn't understand the logic for need of this interface
    private static interface Singleton {
        final ConnectionFactory INSTANCE = new ConnectionFactory();
    }

    private final DataSource dataSource;

    private ConnectionFactory() {
          //necessary connection creation for DataSource datasource
          //connection pooling is used here
    }

    public static Connection getDatabaseConnection() throws SQLException {
        return Singleton.INSTANCE.dataSource.getConnection();
    }
}

要获得连接,我要做的就是调用getDatabaseConnection()类。而且有效。但是我不明白为什么我需要有一个名为Singleton的接口。如果我不使用它将发生什么。我的意思是,不要使用它,不仅是删除该代码,而且还要相应地进行其他更改,例如,如有必要,使构造方法公开,如有必要,getDatabaseConnection()为非静态。

但是在这里真正有效地使用了名为Singleton的接口。我希望我会对此逻辑有所了解。谢谢你。

此代码也可从https://logging.apache.org/log4j/2.x/manual/appenders.html#JDBCAppender

获得

1 个答案:

答案 0 :(得分:1)

基本上ConnectionFactory类正在实现单例设计模式,该模式仅用于获取该类的单个对象/ bean。您可以从各种在线资源中研究此模式,并且会理解该类正在使用具有延迟初始化概念的Singleton。

简单定义:-

  

单一模式是一种设计解决方案,应用程序希望   在所有可能的情况下,只有任何一个类的一个实例   没有任何特殊情况。

单例模式的实现必须:

1)确保单例类只有一个实例存在。

2)提供对该实例的全局访问。

通常,这是通过以下方式完成的:

1)声明该类的所有构造函数均为私有。

2)提供一个静态方法,该方法返回对该实例的引用。

很少有资源可以帮助您更好地理解如何实现此设计模式:- https://howtodoinjava.com/design-patterns/creational/singleton-design-pattern-in-java/

https://dzone.com/articles/singleton-design-pattern