美文网首页
单例模式

单例模式

作者: jugg_can | 来源:发表于2020-07-22 17:37 被阅读0次
    类图(来自百度图库)

    类图很简单就不介绍了,单例主要功能:   "保证一个类只有一个实例"。

    单例主要分为两种饿汉和懒汉,饿汉是线程安全的,而懒汉是线程不安全的。

    正是因为懒汉的不安全产生了单例的很多种写法,以下是一些常用的:

    1.饿汉

    快饿死了,等不了 所以直接用status对象直接new出对象

    class Hungry
       {
         private static final Hungry instance = new Hungry();

         static Hungry getInstance() { return instance; }

         private Hungry() { }
       } 

    2.赖汉

    就可以直接理解为 :比较赖 等你需要时再new对象

    public class Hungry{

      private static instance;

        private Hungry() {

        }

        public static Hungryget getInstance() {

            if instance== null) {

                instance= new Hungry();

            }

        return Instance;

        }

    }

    3.赖汉(双重校验锁 DCL)

    这种方式线程安全 和在多线程的情况下性能也还不错,大部分的人也基本上是用这种写法

    public class Singleton {

        private volatile static Singleton singleton; 

        private Singleton (){} 

        public static Singleton getSingleton() { 

        if (singleton == null) { 

            synchronized (Singleton.class) { 

            if (singleton == null) { 

                singleton = new Singleton(); 

            } 

            } 

        } 

        return singleton; 

        }  }

    4.静态内部类

    静态内部类利用的是类加载的机制实现的(只有在调用该类 该类的静态对象才会加载),非常佩服想出这种方式的大佬,除了这种还有一种枚举的写法,枚举我作为一个android程序园写得少用的也少。所以个人都是用这种方式

    public class Singleton {

        private static class SingletonHolder { 

        private static final Singleton INSTANCE = new Singleton(); 

        } 

        private Singleton (){} 

        public static final Singleton getInstance() { 

        return SingletonHolder.INSTANCE; 

        }  }

    相关文章

      网友评论

          本文标题:单例模式

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