懒汉式和饿汉式
一、饿汉式
1.必须把构造器私有化
private SingleInstance(){
}
2.定义静态成员变量
*饿汉单例是在获取对象前,对象已经提前准备好一个
*这个对象只能是一个,所以定义静态成员变量
public static SingleInstance instance = new SingleInstance();
3.代码如下:
package com.itheima.d5_static_singleinstance;
/**
* 使用饿汉单例实现单例类
*/
public class SingleInstance {
/**
* 2、饿汉单例是在获取对象前,对象已经提前准备好了一个
* 这个对象只能是一个,所以定义静态成员变量
*/
public static SingleInstance instance = new SingleInstance();
// public static int age = 21; //与上面语法相对应
/**
* 1、必须把构造器私有化
*/
private SingleInstance(){
}
}
package com.itheima.d5_static_singleinstance;
public class Test {
public static void main(String[] args) {
SingleInstance s1 = SingleInstance.instance;
SingleInstance s2 = SingleInstance.instance;
System.out.println(s1 == s2);
}
}
二、懒汉式
1.私有化构造器
private SingleInstance2(){
}
2.定义一个静态的成员变量
* 定义一个静态的成员变量负责存储一个单例对象静态成员变量,只有一份
* 注意:最后私有化,避免调用
* 这个对象只能是一个,所以定义静态成员变量
public static SingleInstance instance = new SingleInstance();
3.提供一个方法,对外返回单例对象
//方法的返回值类型就是类名本身
public static SingleInstance2 getInstance(){
if (instance == null){
// 第一次来拿对象,此时需要创建对象
instance = new SingleInstance2();
}
return instance;
}
4.代码如下:
package com.itheima.d5_static_singleinstance;
/**
* 懒汉单例
*/
public class SingleInstance2 {
/**
* 2、定义一个静态的成员变量负责存储一个单例对象
* 静态成员变量,只又一份
* 注意:最后私有化,避免调用
*/
private static SingleInstance2 instance; //null //不能new,new之后就变成了饿汉单例
/**
* 3、提供一个方法,对外返回单例对象
*/
// 方法的返回值类型就是类名本身
public static SingleInstance2 getInstance(){
if (instance == null){
// 第一次来拿对象,此时需要创建对象
instance = new SingleInstance2();
}
return instance;
}
/**
* 1、私有化构造器
*/
private SingleInstance2(){
}
}
package com.itheima.d5_static_singleinstance;
public class Test2 {
public static void main(String[] args) {
SingleInstance2 s1 = SingleInstance2.getInstance();
SingleInstance2 s2 = SingleInstance2.getInstance();
System.out.println(s1 == s2);
}
}