Effective Java --通过枚举enum实现单例设计
最近在看Effective Java,记录下之后编码时可以注意的一些习惯,提高编码质量
每提高一点都是积累
通过枚举enum实现单例设计
实现枚举类
-
枚举中的属性必须放在最前面,一般使用大写字母表示
-
枚举中可以和java类一样定义方法
-
枚举中的构造方法必须是私有的
通过枚举来实现单例
实现单例的核心在于private私有化类中的构造方法,在枚举中的构造方法必须是私有的,这就为枚举来实现单例奠定了基础。
public enum MyDataBaseSource {
DATASOURCE;
private ComboPooledDataSource cpds = null;
private MyDataBaseSource() {
try {
/*--------获取properties文件内容------------*/
// 方法一:
/*
* InputStream is =
* MyDBSource.class.getClassLoader().getResourceAsStream("jdbc.properties");
* Properties p = new Properties(); p.load(is);
* System.out.println(p.getProperty("driverClass") );
*/
// 方法二:(不需要properties的后缀)
/*
* ResourceBundle rb = PropertyResourceBundle.getBundle("jdbc") ;
* System.out.println(rb.getString("driverClass"));
*/
// 方法三:(不需要properties的后缀)
ResourceBundle rs = ResourceBundle.getBundle("jdbc");
cpds = new ComboPooledDataSource();
cpds = new ComboPooledDataSource();
cpds.setDriverClass(rs.getString("driverClass"));
cpds.setJdbcUrl(rs.getString("jdbcUrl"));
cpds.setUser(rs.getString("user"));
cpds.setPassword(rs.getString("password"));
cpds.setMaxPoolSize(Integer.parseInt(rs.getString("maxPoolSize")));
cpds.setMinPoolSize(Integer.parseInt(rs.getString("minPoolSize")));
System.out.println("-----调用了构造方法------");
;
} catch (Exception e) {
e.printStackTrace();
}
}
public Connection getConnection() {
try {
return cpds.getConnection();
} catch (SQLException e) {
return null;
}
}
}
public class Test {
public static void main(String[] args) {
MyDataBaseSource.DATASOURCE.getConnection() ;
MyDataBaseSource.DATASOURCE.getConnection() ;
MyDataBaseSource.DATASOURCE.getConnection() ;
}
}