美文网首页
设计模式一分钟之Singleton

设计模式一分钟之Singleton

作者: 小强聊架构 | 来源:发表于2018-04-04 14:36 被阅读0次


    使用场景:

    单例模式,保证在java中,一个类class只有一个实例存在。

    单例模式最初的定义出现于《设计模式》(艾迪生维斯理, 1994):“保证一个类仅有一个实例,并提供一个访问它的全局访问点。”

    为什么要使用:

    对于系统中某些class,只有一个实例很重要。比如Windows系统的任务管理器,打印机的任务调度程序,同时,可以节约内存使用。

    使用方法:

    有三种形式:

    1. Common initialzation

    public class Singleton {

      private Singleton(){}

      //注意这是private 只供内部调用

      private static Singleton instance = new Singleton();

      //这里提供了一个供外部访问本class的静态方法,可以直接访问

      public static Singleton getInstance() {

        return instance;

       }

    }

    2.lazy initialization

    public class Singleton {

      private static Singleton instance = null;

          //此处,synchronized 很重要。

      public static synchronized Singleton getInstance() {

      //这个方法比上面有所改进,不用每次都进行生成对象,只是第一次使用时生成实例,提高了效率,但是没有第一种形式安全。

      if (instance==null)

        instance=new Singleton();

      return instance;

        }

    }

    3. double-check+synchronized

    public class Singleton{

        private static volatile Singleton instance=null;

        private Singleton(){

            //do something

        }

        public static  Singleton getInstance(){

          //双重判断+同步块的方法,可以大大提高效率。

            if(instance==null){

                //将同步块放到方法的内部,提高了执行效率

                synchronized(Singleton.class){

                    if(instance==null){

                        instance=new Singleton();

                    }

                }

            }

            return instance;

         }

    }


    作者微信公众号 "小强聊架构"。

    相关文章

      网友评论

          本文标题:设计模式一分钟之Singleton

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