单例设计模式
什么是单例模式
-
所谓单例设计模式,就是在软件系统中,某个类只存在一个实例对象,并且也只有一个获得该实例的方法
-
单例模式有两种方式
- 饿汉式
- 懒汉式
-
步骤如下
- 构造器私有化
- 类的内部创建对象
- 对外暴露一个静态的public方法,用于返回唯一实例(getInstance)
饿汉式
饿汉式是在类加载时就创建并且初始化单例对象,这可能造成资源浪费
package com.hspedu.single;
public class Test {
public static void main(String[] args) {
GirlFrind instance = GirlFrind.getInstance();
instance.show();
}
}
class GirlFrind{
private String name;
private static final GirlFrind gf = new GirlFrind("小花");
private GirlFrind(String name) {
this.name = name;
}
public static GirlFrind getInstance() {
return gf;
}
public void show() {
System.out.println(this.name);
}
}
可以看出,gf在类被加载的时候就已经初始化
懒汉式
懒汉式是在类首次调用获取实例的方法时,才创建对象的单例模式
package com.hspedu.single;
public class Test {
public static void main(String[] args) {
System.out.println(GirlFrind.n1);
}
}
class GirlFrind{
private String name;
public static int n1 = 10;
private static GirlFrind gf = null;
private GirlFrind(String name) {
System.out.println("构造器被调用");
this.name = name;
}
public static GirlFrind getInstance() {
if (gf == null) {
gf = new GirlFrind("小花");
}
return gf;
}
public void show() {
System.out.println(this.name);
}
}
只有当getInstance被调用时,才会创建gf。
执行可以发现,由于只调用了静态成员,因此只加载了类,因此没有调用构造器。
懒汉式和饿汉式的区别
饿汉式 懒汉式 线程安全 安全 不安全,需要额外处理 资源加载时机 类载入就创建实例 调用getInstance才创建 适用场景 单例对象简单、一定被使用 单例对象开销大 潜在问题 可能造成资源浪费 多线程环境下可能创建多个实例懒汉式的线程安全版本后期补充
2 个帖子 - 2 位参与者