设计模式之单例模式的几种写法——java

Posted gdhzdbh

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了设计模式之单例模式的几种写法——java相关的知识,希望对你有一定的参考价值。

对于设计模式的使用场景和好处,之前有介绍一篇,今天主要是单例模式的编写方式,直接看代码吧

  • 单例模式之饿汉模式,不会懒加载。线程安全

/**
 * @Author wangtao
 * @Description  单例模式之饿汉模式,不会懒加载。线程安全
 * @Date 2019-5-22  12:32
 * @优点  线程安全,简单易实现
 * @缺点  在进行类加载的时候就创建好实例,会占用内存
 **/
class SingletonHungry
    //私有构造函数
    private  SingletonHungry()
    //创建实例
    private static final SingletonHungry singletonHungry=new SingletonHungry();
    //提供获取公有方法
    public static SingletonHungry getInstance()
        return singletonHungry;
    
  • 单例模式之懒汉模式,会懒加载。线程不安全

/**
 * @Author wangtao
 * @Description  单例模式之懒汉模式,会懒加载。线程不安全
 * @Date 2019-5-22  12:32
 * @优点
 * @缺点
 **/
class SingletonLazy 
    //私有构造函数
    private SingletonLazy() 
    //创建实例
    private static SingletonLazy singletonLazy;
    //提供获取公有方法
    public static SingletonLazy getInstance() 
        if(singletonLazy==null)
            singletonLazy=new SingletonLazy();
        
        return singletonLazy;
    

  

  • 单例模式之懒汉模式,会懒加载。线程安全,同步方法

/**
 * @Author wangtao
 * @Description  单例模式之懒汉模式,会懒加载。线程安全,同步方法
 * @Date 2019-5-22  12:32
 * @优点
 * @缺点
 **/
class SingletonLazyThread 
    //私有构造函数
    private SingletonLazyThread() 
    //创建实例
    private static SingletonLazyThread singletonLazyThread;
    //提供获取公有方法
    public static synchronized SingletonLazyThread getInstance() 
        if(singletonLazyThread==null)
            singletonLazyThread=new SingletonLazyThread();
        
        return singletonLazyThread;
    

  • 单例模式之懒汉模式,会懒加载。线程安全,同步代码块(文本称为:双重锁)

 

/**
 * @Author wangtao
 * @Description  单例模式之懒汉模式,会懒加载。线程安全,同步代码块(文本称为:双重锁)
 * @Date 2019-5-22  12:32
 * @优点
 * @缺点
 **/
class SingletonLazyThread2 
    //私有构造函数
    private SingletonLazyThread2() 
    //创建实例
    private static SingletonLazyThread2 singletonLazyThread2;
    //提供获取公有方法
    public static  SingletonLazyThread2 getInstance() 
        synchronized(SingletonLazyThread2.class)
            if(singletonLazyThread2==null)
                singletonLazyThread2=new SingletonLazyThread2();
            
        
        return singletonLazyThread2;
    
  • 单例模式之饿汉模式优化,会懒加载。线程安全,使用静态内部类

/**
 * @Author wangtao
 * @Description  单例模式之饿汉模式优化,会懒加载。线程安全,使用静态内部类
 * @Date 2019-5-22  12:32
 * @优点 懒加载,在进行加载内部类的时候才会初始化对象,线程安全,是饿汉模式的优化,避免了直接的实例化占用内存空间的问题
 * @缺点 只使用于静态的方法
 **/
class SingletonInnerClass
    //私有构造函数
    private SingletonInnerClass() 
    //创建实例
    private static class SingletonInner
        private static final  SingletonInnerClass singletonInnerClass =new SingletonInnerClass();
    
    //提供获取公有方法
    public static  SingletonInnerClass getInstance() 
        return SingletonInner.singletonInnerClass;
    
  • 单例模式之枚举,不会懒加载。线程安全,自动序列化

/**
 * @Author wangtao
 * @Description  单例模式之枚举,不会懒加载。线程安全,自动序列化
 * @Date 2019-5-22  12:32
 * @优点
 * @缺点
 **/
enum  SingletonEnum
    INSTANCE;
    public void say()
        System.out.println("枚举类的方法");
    

  

 

以上是关于设计模式之单例模式的几种写法——java的主要内容,如果未能解决你的问题,请参考以下文章

单例模式:Java单例模式的几种写法及它们的优缺点

单例模式的几种写法的差异

Java设计模式之单例模式

java单例模式常见的几种写法

Java设计模式之单例模式(七种写法)

单例模式(下)---聊一聊单例模式的几种写法