• 单例模式


    1.单例模式:

      这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象创建。这个类提供一种访问方式访问其唯一的对象的方式,

      可以直接访问,不需要实例化该类对象。

    2.特点:

      1.单例类只能有一个实例。

      2.单例类必须自己创建自己的唯一实例。

      3.单例类必须给所有其他对象提供这一实例。

    3.实现方法:

      许多人可能值记得懒汉式和饿汉式,但是最好尽可能全记住,不然面试官问你还有没有其他的那就哑然了。

      (1)懒汉式:线程不安全,加锁会影响效率

     1 public class LSingle {
     2     private static LSingle single;
     3     //私有的无参构造器一定要存在:不想用别人用new的方法创建对象
     4     private LSingle() {}
     5     //加锁解决线程不安全问题但是影响效率
     6     public static /*synchronized*/ LSingle getSingle() {
     7         if(single==null)single = new LSingle();
     8         return single;
     9     }
    10 
    11 }

      (2)饿汉式:线程安全,在类加载中初始化,浪费内存

    1 public class ESingle {
    2     private static ESingle single = new ESingle();
    3         //必须存在私有构造器
    4     private ESingle() {}
    5     public static ESingle getSingle() {
    6         return single;
    7     }
    8 
    9 }        

      (3)双重校验锁:采用双锁机制,安全且在多线程的情况下保持高性能,但是不易实现

     1 public class DoubleLockSingle {
     2     private static DoubleLockSingle single;
     3     //必须存在私有构造器
     4     private DoubleLockSingle() {}
     5     public static DoubleLockSingle getSingle() {
     6         if(single==null) {
     7             synchronized(DoubleLockSingle.class) {
     8                 if(single==null) {
     9                     single = new DoubleLockSingle();
    10                 }
    11             }
    12         }
    13         return single;
    14     }
    15 
    16 }

      (4)静态内部类/登记式:线程安全,和双锁机制效果一样,实现更简单,只是有于静态域

    public class StaticSingle {
        private static class InnerSingle{
            //常量:直接调用
            private static final StaticSingle single = new StaticSingle();
        }
        public static StaticSingle getSingle() {
            return InnerSingle.single;
        }
    }

      (5)枚举:线程安全,实现容易,是实现单例模式的最佳方法,支持自动系列化机制防止多次序列化,但是使用的少

    1 //枚举类
    2 public enum EnumSingle {
    3     single;
    4     public void whateverMethod() {  
    5     }  
    6 }
  • 相关阅读:
    超酷震撼 HTML5/CSS3动画应用及源码
    精美jQuery插件及源码 前端开发福利
    web前端炫酷实用的HTML5应用和jQuery插件
    8个web前端的精美HTML5 & CSS3效果及源码下载
    分享web前端七款HTML5 Loading动画特效集锦
    7款超酷HTML5 3D动画精选应用及源码
    8个WEB前端创意HTML5动画应用精选
    让人心动的jQuery插件和HTML5动画
    华丽的HTML5/jQuery动画和应用 前端必备
    炫酷实用的jQuery插件 涵盖菜单、按钮、图片
  • 原文地址:https://www.cnblogs.com/spring-effort/p/11553443.html
Copyright © 2020-2023  润新知