饿汉模式
public class singletonPattern {
// 饿汉式,在加载类的同时就创建好了类的唯一对象
public static void main(String[] args) {
GirlFriend girlFriend = GirlFriend.getGirlFriend();
GirlFriend girlFriend1 = GirlFriend.getGirlFriend();
if (girlFriend1 == girlFriend) {
System.out.println("指向同一个对象");
}
}
}
class GirlFriend {
private String name;
private static GirlFriend girlFriend = new GirlFriend("李同学");
private GirlFriend(String name) {
this.name = name;
}
public static GirlFriend getGirlFriend() {
return girlFriend;
}
}
懒汉模式
public class singletonPattern1 {
// 懒汉式的单例模式,为避免调用类的静态对象时创建对象而浪费资源,
// 只在调用返回对象的静态方法时才创建对象
public static void main(String[] args) {
GirlFriend1 girlFriend1 = GirlFriend1.getGirlFriend1();
}
}
class GirlFriend1 {
private String name;
private static GirlFriend1 girlFriend1;
private GirlFriend1(String name) {
this.name = name;
}
public static GirlFriend1 getGirlFriend1() {
if (girlFriend1 == null) {
girlFriend1 = new GirlFriend1("陈同学");
}
return girlFriend1;
}
}
懒汉模式和饿汉模式区别
- 饿汉模式:对象在类被加载时创建。懒汉模式:对象在调用静态获取对象方法的时候创建
- 饿汉模式容易浪费对象空间,因为类被加载,不一定要去创建对象。
- 多线程的情况下,懒汉模式可能会出现多个线程同时进入到构建对象的代码块,从而创建多个对象,这将破坏单例模式中一个类只能有一个对象的规矩。