接 单例模式与多线程
1.6 使用static 代码块实现单例模式
由于静态代码块在类加载时就已经执行了,所以可以应用静态代码块的该特性来设计单例模式。
package testSingleton2;
public class MyObject {
private static MyObject myObject = null;
private MyObject(){}
static {
myObject = new MyObject();
}
public static MyObject getInstance(){
return myObject;
}
}
1.7 使用enum 枚举数据类型来实现单例模式
枚举enum和静态代码块的特性类似,在使用枚举时,构造方法会自动被调用。
package testSingleton2;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class MyObject {
public enum MyEnumSingleton{
connectionFactory;
private Connection connection;
private MyEnumSingleton(){
try{
System.out.println("创建MyObject对象");
String url = "jdbc:sqlserver://localhost:1079;databaseName=y2";
String username = "sa";
String password = "";
String driverName = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
Class.forName(driverName);
connection = DriverManager.getConnection(url,username,password);
}catch(ClassNotFoundException e){
e.printStackTrace();
}catch(SQLException e){
e.printStackTrace();
}
}
public Connection getConnection(){
return connection;
}
}
public static Connection getConnection(){
return MyEnumSingleton.connectionFactory.getConnection();
}
}
也可以实现单例模式。