设计模式之单例模式(6种实现方法)

**

设计模式之单例模式(6种实现方法)

**
设计模式—单例
1.单例第概念
Ensure a class has only one instance, and provide a global point of access to it.
(确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。)
图解
这里写图片描述

2.好处
对于频繁使用的对象,可以省略创建对象所花费的时间,对于那些重量级对象而言,
是非常可观的一笔系统开销

由于new操作的次数减少,因而对系统内存的使用频率也会降低,
这将减轻GC压力,缩短GC停顿时间

单例第6种模式
1.饿汉模式

public class SingletonModeDemo1 {
    private static final SingletonModeDemo1 singletonMode = new SingletonModeDemo1();

    private SingletonModeDemo1(){
        System.out.println("单例模式——饿汉模式");
    }

    public static SingletonModeDemo1 getInstance(){
        return singletonMode;
    }

    public static void say(){
        System.out.println("我是一个单例模式");
    }

}

不足之处:无法对instance实例进行延时加载
优化方案:懒汉模式

2.懒汉模式
代码

public class SingletonModeDemo2 {
    private static SingletonModeDemo2 singletonMode;

    private SingletonModeDemo2(){
        System.out.println("单例模式——懒汉模式");
    }

    public static SingletonModeDemo2 getInstance(){
        if(singletonMode ==null){
            singletonMode = new SingletonModeDemo2();
        }
        return singletonMode;
    }

}

不足之处:无法保证线程安全
优化:懒汉线程安全模式

3.懒汉线程安全

public class SingletonModeDemo3 {
    private static SingletonModeDemo3 singletonMode;

    private SingletonModeDemo3(){
        System.out.println("单例模式——懒汉线程安全模式");
    }

    //第一种模式,在方面上添加synchronized
    public static synchronized SingletonModeDemo3 getInstance(){
        if(singletonMode ==null){
            singletonMode = new SingletonModeDemo3();
        }
        return singletonMode;
    }

    //第二种方法在代码块种添加synchronized
    public static SingletonModeDemo3 getInstance1(){
        synchronized(SingletonModeDemo4.class){
            if(singletonMode ==null){
                singletonMode = new SingletonModeDemo3();
            }
        }
        return singletonMode;
    }

}


不足之处:性能
优化:DCL

4.DCL(双层检索)

public class SingletonModeDemo4 {
    private static volatile SingletonModeDemo4 singletonMode;

    private SingletonModeDemo4(){
        System.out.println("单例模式——DCL");
    }


    public static SingletonModeDemo4 getInstance(){
        if(singletonMode == null){
            synchronized(SingletonModeDemo4.class){
                if(singletonMode ==null){
                    singletonMode = new SingletonModeDemo4();
                }
            }
        }
        return singletonMode;
    }

}

5.静态内部类

public class SingletonModeDemo5 {

    private SingletonModeDemo5(){

    }

    public static SingletonModeClass getInstance(){
        return SingletonModeClass.singletonModeClass;
    }

    private static class SingletonModeClass{
        private static final SingletonModeClass singletonModeClass = new SingletonModeClass();
    }
}

6.枚举

public enum SingletonModeDemo6 {
    INSTANCE;

    public void say(){
        System.out.println("单例模式——枚举");
    }
}

猜你喜欢

转载自blog.csdn.net/omuxiaozuo/article/details/78992083