美文网首页
JAVA设计模式 - 单例模式

JAVA设计模式 - 单例模式

作者: Sunshine__7b8f | 来源:发表于2020-10-19 20:54 被阅读0次

JAVA设计模式 - 单例模式

单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。

这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。

饿汉式单例

/**
 * @author spp
 * @date 2020-10-17 21:26
 * 饿汉式单例,可能会浪费空间
 **/
public class Hungry {
    private final static Hungry HUNGRY = new Hungry();

    private Hungry(){

    }

    public static Hungry getInstance(){
        return HUNGRY;
    }

}

懒汉式单例

/**
 * @author spp
 * @date 2020-10-17 21:30
 * 懒汉式单例
 **/
public class LazyMan {
    private static LazyMan lazyMan;

    private LazyMan(){

    }
    
    public static LazyMan getInstance(){
        //该方法为线程不安全的
        if (null == lazyMan){
            lazyMan = new LazyMan();
        }
        return lazyMan;
    }

}

改进

懒汉式单例加双重锁,DCL 懒汉式

/**
 * @author spp
 * @date 2020-10-17 21:30
 * 懒汉式单例
 **/
public class LazyMan {
    /**
     * volatile  保证可见性,防止指令重排
     */
    private volatile static LazyMan lazyMan;
    private static final ReentrantLock LOCK = new ReentrantLock();

    private LazyMan(){
        System.out.println(Thread.currentThread().getName());
    }

    public static LazyMan getInstance(){
        //DCL 懒汉式
        if (null == lazyMan){
            LOCK.lock();
            try {
                if (null == lazyMan){
                    lazyMan = new LazyMan();
                }
            }finally {
                LOCK.unlock();
            }
        }
        return lazyMan;
    }

}

静态内部类

/**
 * @author spp
 * @date 2020-10-17 21:44
 * 静态内部类
 **/
public class Holder {
    private Holder(){

    }
    
    private static class InnerClass{
        private static final Holder HOLDER = new Holder();
    }

    public static Holder getInstance(){
        return InnerClass.HOLDER;
    }
    
}

==以上都方法可以说不安全,Java有一种强大的东西叫做反射~==

枚举类单例(推荐)

/**
 * @author spp
 * @date 2020-10-17 21:48
 * 枚举类单例
 **/
public enum  EnumSingle {

    INSTANCE;

    public Single getInstance(){
        return instance;
    }

    private final Single instance;
    EnumSingle() {
        instance = new Single();
    }

    public static void main(String[] args) {
        //调用
        EnumSingle.INSTANCE.getInstance();
    }
    
}
class Single{

}

相关文章

  • JAVA设计模式 - 单例模式

    JAVA设计模式 - 单例模式 单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一...

  • 单例模式

    JAVA设计模式之单例模式 十种常用的设计模式 概念: java中单例模式是一种常见的设计模式,单例模式的写法...

  • Java中单例模式你用的哪一种?

    一起讨论java中的单例模式。单例模式是java设计模式中算是最简单的设计模式了。 * java实现单例模式的写法...

  • JAVA设计模式之单例模式

    JAVA设计模式之单例模式

  • 设计模式

    Java 设计模式情景分析 ——单例模式 Java 设计模式情景分析——建造者模式 Java 设计模式情景分析——...

  • Java设计模式教程

    Java设计模式教程 Java工厂设计模式 Java抽象工厂模式 Java单例模式 Java建造者(Builder...

  • 设计模式——单例模式

    设计模式——单例模式 单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一,这种类型...

  • 设计模式

    单例模式 单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式...

  • 设计模式《一》单例模式

    单例模式 单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属...

  • 设计模式之单例模式详解(附源代码)

    单例模式 单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属...

网友评论

      本文标题:JAVA设计模式 - 单例模式

      本文链接:https://www.haomeiwen.com/subject/sjplmktx.html