【问题标题】:can anyone explain the use of nested static interface below谁能解释下面嵌套静态接口的使用
【发布时间】:2019-10-15 16:18:34
【问题描述】:

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

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获得

【问题讨论】:

  • 你是问为什么 ConnectionFactory 是单例,还是说为什么单例是使用嵌套接口实现的?
  • @shmosel 我不了解 OP,但我很想知道为什么使用这样的嵌套接口来实现它。你能指出我正确的方向吗?

标签: java jdbc log4j2


【解决方案1】:

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

简单定义:-

单例模式是应用程序想要的设计解决方案 在所有可能的情况下,任何类都有一个且只有一个实例 没有任何异常情况。

单例模式的实现必须:

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

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

通常,这是由以下人员完成的:

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

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

为您更好地理解如何实现此设计模式提供了一些资源:- https://howtodoinjava.com/design-patterns/creational/singleton-design-pattern-in-java/

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

【讨论】:

  • 这个答案并没有真正触及“我正在努力但无法理解为什么我需要名为 Singleton 的界面”这个问题。 @shmosel 对这个问题的评论确实很好地回答了这个问题。
  • 如果您仔细阅读答案,您会知道它所说的与@shmosel 在评论中提供的相同。 en.wikipedia.org/wiki/Initialization-on-demand_holder_idiom 表示只有延迟初始化的单例概念。
  • 据我所知,它没有。重要的是,为了将静态初始化从启动时间推迟到按需运行时间,静态属性必须是嵌套静态类的成员。您的回答中没有提到这一点:让单例成为外部类的成员意味着它是在加载类时创建的,在开始时。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-07
  • 2015-12-21
相关资源
最近更新 更多