单例 : 只有一个对象, 不能多个.
饿汉式单例 : 适用于创建对象快速简单.
- 封死new操作, 封装构造器, 使用private修饰构造器
- 在类中声明私有的静态的指向本类对象的引用, 并同时创建唯一对象
- 在类中提供一个公共静态方法, 用以通过类即可获取唯一对象
class Singleton {
//为了防止外部直接修改only的值, 必须将其封装
private static Singleton only = new Singleton(); // only是静态属性, 会在类加载时显式赋值.
public static Singleton getInstance() {
return only;
}
private Singleton() {
super();
}
}
public class SingletonTest {
public static void main3(String[] args) {
Singleton s1 = Singleton.getInstance();
Singleton s2 = Singleton.getInstance();
System.out.println(s1 == s2);
}
}
懒汉式单例: 拖延症, 适用于创建对象耗时. 可以延迟创建.
- 封死new 私有化构造器
- 声明私有的静态的指向本类对象的引用, 不创建对象
- 声明公共的静态方法,用来获取对象, 第一次获取对象时才创建真的对象.
class Singleton {
private static Singleton only = null;
public static Singleton getInstance() {
if (only == null) { // 只有在第一次时才创建对象
only = new Singleton();
}
return only;
}
private Singleton() {
}
}
public class SingletonTest {
public static void main(String[] args) {
Singleton s1 = Singleton.getInstance();
Singleton s2 = Singleton.getInstance();
System.out.println(s1 == s2);
}
}