Java单例模式以及其实现

Java单例模式以及其实现单例模式单例模式(SingletonPattern)是Java中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。简单来说就是类只能创建唯一一个对象实现要求:(1)构造器私有化:指用private修饰构造器,使得外部无法调用构造器,使得类外部方法无法创建该类对象(2)自行创建对象,静态

大家好,又见面了,我是你们的朋友全栈君。

单例模式

单例模式(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账号...

(0)


相关推荐

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号