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

java设计模式------单例模式

作者: 我弟是个程序员 | 来源:发表于2017-10-20 17:32 被阅读0次

    该模式是与具体的项目业务无关的设计模式

    单例模式,是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中一个类只有一个实例。即一个类只有一个对象实例

    模式如图:

    单例模式

    单列模式有很多种,下面来一种一种的介绍。

    1.懒汉式,也是常用的形式。
    public class SingletonClass{
        private static SingletonClass instance=null;
        //线程安全,但是延迟加载,去掉synchronized关键字,就线程不安全了
        public static synchronized SingletonClass getInstance(){
            if(instance==null){
                   instance=new SingletonClass();
            }
            return instance;
        }
        //构造函数是私有的,自己才可以用
        private SingletonClass(){
        }
    }
    
    2.:饿汉式,不延迟加载,线程安全
    public class Singleton{
        //在自己内部定义自己的一个实例,只供内部调用
        private static final Singleton instance = new Singleton();
        private Singleton(){
            //do something
        }
        //这里提供了一个供外部访问本class的静态方法,可以直接访问
        public static Singleton getInstance(){
            return instance;
        }
    }
    
    3.双重校验锁(DCL),延迟加载,线程安全
    public class Singleton{
        private static volatile Singleton instance=null;
        private Singleton(){
            //do something
        }
        //这个模式将同步内容下方到if内部,提高了执行的效率,不必每次获取对象时都进行同步,只有第一次才同步,创建了以后就没必要了。
        //处理高并发的懒汉式
        public static  Singleton getInstance(){
            if(instance==null){
                synchronized(Singleton.class){
                    if(instance==null){
                        instance=new Singleton();
                    }
                }
            }
            return instance;
         }
    }
    
    4.静态内部类,延迟加载,线程安全
    public class Singleton {  
        /**
         * 类级的内部类,也就是静态的成员式内部类,该内部类的实例与外部类的实例
         * 没有绑定关系,而且只有被调用到才会装载,从而实现了延迟加载
         */  
        private static class SingletonHolder {  
            private static Singleton instance = new Singleton();  
        }  
      
        private Singleton() {  
        }  
    
        public static  Singleton getInstance() {  
            return SingletonHolder.instance;  
        }  
    }
    

    相关文章

      网友评论

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

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