单例模式
462字约2分钟
2025-09-23
单例模式
单例模式的对象一般是重量级的对象
单例模式-饿汉式
只要这个类一旦被加载,那么这个类的对象就会被创建,即使没有调用该对象,表示很着急的意思,所以这种写法就叫做饿汉式
饿汉式的缺点是创建了对象,但是可能存在没有使用的情况,这样会导致资源的浪费
public class SingletonPattern {
public static void main(String[] args) {
// A a = A.ret();
// ret()返回的是有信息的对象
System.out.println(A.ret());
}
}
// 单例模式-饿汉式
class A {
private String name;
// 创建本类的对象,这样返回的对象就一直是这里创建的对象信息
// 创建对象也属于属性初始化,所以加载该类的时候会加载本属性
private static A a = new A("小花");
private A(String name) {
this.name = name;
}
public static A ret() {
// 返回有信息的对象
return a;
}
public String toString() {
return name;
}
}
- 将构造器私有化(防止被直接创建对象)
- 在类的内部直接创建私有化对象(该对象是static类型的)
- 提供一个公共的
static
方法,并返回对象
单例模式-懒汉式
懒汉式的缺点是会有线程安全问题
public class SluggardStyle {
public static void main(String[] args) {
System.out.println(B.ret());
}
}
// 单例模式-懒汉式
class B {
private String name;
private static B b;
private B(String name) {
System.out.println("构造器被调用");
this.name = name;
}
// 调用这个方法的时候才会创建对象,所以即使这个类被加载了,这个对象也不会被创建
public static B ret() {
if (b == null) {
b = new B("小花");
}
return b;
}
public String toString() {
return name;
}
}
饿汉式和懒汉式的写法差不多