大家好,又见面了,我是你们的朋友全栈君。
单例模式
单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。
这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。
简单来说就是类只能创建唯一一个对象
实现要求:
(1)构造器私有化:指用private 修饰构造器,使得外部无法调用构造器,使得类外部方法无法创建该类对象
(2)自行创建对象,静态变量保存 :
(3)向外提供这个实例
(4)强调这是个单例,可用final表示
实现方法分为:饿汉式,懒汉式
饿汉式:初始化类时直接创建对象
实现方法主要有三种:
1、直接用静态字段保存,使得初始化类时就创建对象 ,最简单
public class Singleton {
public static final Singleton INSTANCE = new Singleton();
private Singleton(){} //构造器私有化
}
2、通过枚举实现,设置唯一一个枚举,最简洁
public enum Singleton {
INSTANCE
}
3、通过静态字段实现,可以在静态字段中实现复杂操作
public class Singleton {
public static final Singleton INSTANCE;
static {
INSTANCE = new Singleton();
}
private Singleton(){};
}
懒汉式:要使用时才创建对象
实现方法也有三种
1、通过get方法获得唯一对象,最简单的懒汉式,不过不适合单线程
public class Singleton {
private static Singleton INSTANCE;
private Singleton(){}
private static Singleton getINSTANCE(){
if(INSTANCE == null){
INSTANCE = new Singleton();
}
return INSTANCE;
}
}
2、相对于上面相比添加了一个多线程监视器,称为双检锁/双重校验锁
public class Singleton {
private static Singleton INSTANCE;
private Singleton(){}
private static Singleton getINSTANCE() {
if (INSTANCE == null) {
synchronized (Singleton.class) {//加一个多线程监视器
if (INSTANCE == null) {
INSTANCE = new Singleton();
}
}
}
return INSTANCE;
}
}
3、因为类初始化不会初始化静态内部类,它是要单独去加载和初始化的,从而实现线程安全,所以可用内部类实现线程互异(登记式)
public class Singleton {
private Singleton(){}
private static class Inner{
private static final Singleton INSTANCE = new Singleton();
}
public static Singleton getInstance(){return Inner.INSTANCE;}
}
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/156871.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...