【发布时间】:2012-04-01 10:26:06
【问题描述】:
这是我获取数据库连接的单例类。
我在这里有一个问题:为什么在单例类中必须有一个私有构造函数(在我的整个应用程序中,我只调用这个类一次)并且可以使用静态方法来实现一个类的实例?
这个私有构造函数是可以避免的,还是强制的?
public class ConnPoolFactory {
private static DataSource dataSource;
private static Connection connection;
private ConnPoolFactory() {
System.out.println(" ConnPoolFactory cons is called ");
}
public static synchronized Connection getConnection() throws SQLException {
try {
if (connection == null) {
Context initContext = new InitialContext();
Context envContext = (Context) initContext
.lookup("java:/comp/env");
dataSource = (DataSource) envContext.lookup("jdbc/Naresh");
connection = dataSource.getConnection();
} else {
return connection;
}
} catch (NamingException e) {
e.printStackTrace();
}
return connection;
}
}
【问题讨论】:
-
感谢您的回答,但是为什么其他人会创建我的 Singleton 类的实例,因为它是我的应用程序并且我可以完全控制它??
-
如果您不将数据声明为私有,其他人将不会访问您的数据:如果您是唯一从事该项目的开发人员并且可以完全控制它,那没关系。但是当其他开发人员开始您的项目时,他们不会知道不允许他们创建更多类的实例。顺便说一句,你自己也可能不小心忘记它:)
-
顺便说一句:这不是单例,因为您必须在某处创建一个实例。你有一个实用程序类,它也必须有一个私有构造函数。
标签: java design-patterns