认识设计模式(一)---单例模式(2)
(一)饿汉式(静态代码块)
(1)步骤如下:
- 构造器私有化(防止new再获取对象)
- 类的内部创建对象(但是不急着实例化)
- 在静态代码块里,对象实例化
- 向外暴露一个静态的公共方法,getInstance,这个唯一的方法用来获取对象实例
(2)单例类代码如下:
class Singleton02{
//1-构造器私有化
private Singleton02(){ }
//***2-本类内部创建对象实例
private static Singleton02 instance;
//***3-在静态代码块中,创建单例对象
static {
instance=new Singleton02();
}
//4-提供一个公有的静态方法,返回实例对象
public static Singleton02 getInstance(){
return instance;
}
}
(3)测试类代码如下
public class SingletonTest02 {
public static void main(String[] args) {
//优缺点跟之前一样,浪费内存
Singleton02 instance01=Singleton02.getInstance();
Singleton02 instance02=Singleton02.getInstance();
System.out.println(instance01==instance02);
System.out.println("instance01-hashCode="+instance01.hashCode());
System.out.println("instance02-hashCode="+instance02.hashCode());
}
}
(二)优缺点分析
同"饿汉式(静态变量)"
(三)与饿汉式(静态变量)的区别
private final static Singleton01 instance=new Singleton01();
改成了
private static Singleton02 instance;
static {
instance=new Singleton02();
}