美文网首页
单例模式

单例模式

作者: 大先生居然都有人用了 | 来源:发表于2018-12-28 10:18 被阅读0次

什么是单例?

    在整个系统当中只允许一个实例存在。

单例的实现:

    (1)懒汉模式

    /**

    * 懒汉模式

    * 高并发时会有多个实例

    */

    public class Single1 {

        //静态私有实例

        private static Single1 single;

        //静态构造

        private Single1(){}

        public static Single1 getInstance(){

            if(single == null){

                single = new Single1();

            }

            return single;

        }

    }

    (2)饿汉模式

      /**

       *饿汉模式

       *在没有使用此单例时,该单例就已加载在内存中

       */

        public class Single2 {

            //类加载时就实例化对象

            private static final Single2 single = new Single2();

            public static Single2 getInstance(){

                //立即返回

                return single;

            }

        }

    (3)synchronized 同步方法

    /**

    *synchronized 同步方法式

    *每次获取单例时,都要先获取锁,性能影响较大

    */

    public class Single3 {

        private static Single3 single;

        private Single3(){}

        public static synchronized Single3 getInstance(){

            if(single == null){

                single = new Single3();

            }

            return single;

        }

}

    (4)双重检验锁

    /**

    *双重检验锁

    *每个线程最多只有在第一次的时候才会进入同步块

    */

    public class Single4 {

        private static volatile Single4 single;

        private Single4(){}

        public static synchronized Single4 getInstance(){

            //多线程直接访问,不做控制吗,不影响性能

            if(single == null){

                synchronized (Single4.class) {

                    if(single == null){

                        single = new Single4();

                    } 

                }

            }

            //如果不为null,不会影响性能,只有第一次才会影响性能

            return single;

        }

    }

    (5)静态内部类

    /**

    *静态内部类

    */

    public class Single5 {

        private Single5(){}

        public static synchronized Single5 getInstance(){

            return InnerClass.single;

        }

        //只有用到内部的静态属性时才会加载到虚拟机中

        private static class InnerClass{

            private static Single5 single = new Single5();

        }

    }

    (6)枚举

    /**

    *枚举

    */

    public enum Single6 {

        SINGLE_6;

        public Single6 getInstance(){

            return SINGLE_6;

        }

    }

单例的好处:

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

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

相关文章

  • 【设计模式】单例模式

    单例模式 常用单例模式: 懒汉单例模式: 静态内部类单例模式: Android Application 中使用单例模式:

  • Android设计模式总结

    单例模式:饿汉单例模式://饿汉单例模式 懒汉单例模式: Double CheckLock(DCL)实现单例 Bu...

  • 2018-04-08php实战设计模式

    一、单例模式 单例模式是最经典的设计模式之一,到底什么是单例?单例模式适用场景是什么?单例模式如何设计?php中单...

  • 设计模式之单例模式详解

    设计模式之单例模式详解 单例模式写法大全,也许有你不知道的写法 导航 引言 什么是单例? 单例模式作用 单例模式的...

  • Telegram开源项目之单例模式

    NotificationCenter的单例模式 NotificationCenter的单例模式分析 这种单例模式是...

  • 单例模式Java篇

    单例设计模式- 饿汉式 单例设计模式 - 懒汉式 单例设计模式 - 懒汉式 - 多线程并发 单例设计模式 - 懒汉...

  • IOS单例模式的底层原理

    单例介绍 本文源码下载地址 1.什么是单例 说到单例首先要提到单例模式,因为单例模式是单例存在的目的 单例模式是一...

  • 单例

    iOS单例模式iOS之单例模式初探iOS单例详解

  • 单例模式

    单例模式1 单例模式2

  • java的单例模式

    饿汉单例模式 懒汉单例模式

网友评论

      本文标题:单例模式

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