zoukankan      html  css  js  c++  java
  • 设计模式《单例设计模式》

    第一种 : 饿汉单例模式

      

    /**   
     * Copyright © 2019 eSunny Info. Tech Ltd. All rights reserved.
     * 
     * 功能描述:
     * @Package: com.zuoyan.singleton.demo 
     * @author: Administrator   
     * @date: 2019年3月27日 上午8:47:01 
     */
    package com.zuoyan.singleton.demo;
    
    /**   
    * Copyright: Copyright (c) 2019 ZuoYanCoder
    * 
    * @ClassName: SingletonHungry.java
    * @Description: 饿汉式单例,程序一加入到内存就开始创建对象了
    *
    * @version: v1.0.0
    * @author: Administrator
    * @date: 2019年3月27日 上午8:47:01 
    *
    * Modification History:
    * Date         Author          Version            Description
    *---------------------------------------------------------*
    * 2019年3月27日     Administrator           v1.0.0               修改原因
    */
    public class SingletonHungry {
        private static SingletonHungry single = new SingletonHungry();
        
        //私有 构造函数
        private SingletonHungry(){};
        
        //获取单例对象
        public static SingletonHungry getSingleTonInstance()
        {
            return single;
        }
    
    }

    第二种:懒加载模式

     1 /**   
     2  * Copyright © 2019 eSunny Info. Tech ZuoYanCoder. All rights reserved.
     3  * 
     4  * 功能描述:
     5  * @Package: com.zuoyan.singleton.demo 
     6  * @author: Administrator   
     7  * @date: 2019年3月27日 上午8:52:54 
     8  */
     9 package com.zuoyan.singleton.demo;
    10 
    11 /**   
    12 * Copyright: Copyright (c) 2019 ZuoYanCoder
    13 * 
    14 * @ClassName: SingletonLazy.java
    15 * @Description: 懒汉式单例模式
    16 * 特点: 对象是方法被调用时才初始化,也叫做对象的延时加载。称为懒汉式
    17 * Single类进内存,对象还没有存在,只用调用了getInstance方法时,才创建。
    18 *
    19 * @version: v1.0.0
    20 * @author: Administrator
    21 * @date: 2019年3月27日 上午8:52:54 
    22 *
    23 * Modification History:
    24 * Date         Author          Version            Description
    25 *---------------------------------------------------------*
    26 * 2019年3月27日     Administrator           v1.0.0               修改原因
    27 */
    28 public class SingletonLazy {
    29     
    30     private static SingletonLazy single = null;
    31     private SingletonLazy(){}
    32     
    33     public static SingletonLazy getInstance(){
    34         if(single ==null)
    35         {
    36             synchronized (SingletonLazy.class) {
    37                 single= new SingletonLazy();
    38             }
    39         }
    40         return single;
    41     }
    42 
    43 }

    第三种 静态内部类实现单例模式

     1 /**   
     2  * Copyright © 2019 eSunny Info. Tech ZuoYanCoder. All rights reserved.
     3  * 
     4  * 功能描述:
     5  * @Package: com.zuoyan.singleton.demo 
     6  * @author: Administrator   
     7  * @date: 2019年3月27日 上午8:58:58 
     8  */
     9 package com.zuoyan.singleton.demo;
    10 
    11 /**   
    12 * Copyright: Copyright (c) 2019 ZuoYanCoder
    13 * 
    14 * @ClassName: SingletonStaticInnerClass.java
    15 * @Description: 静态内部类实现,也是懒加载的一种方式
    16 *  要点:
    17 *    1.外部类没有static属性,则不会像饿汉式那样 立即加载对象
    18 *    2.只有真正调用getInstance(),才会加载静态内部类。加载类是线程安全的
    19 *    。instance 是static final类型,保证了内存中只会存在一个这样的实例
    20 *    而且只能被赋值一次,从而保证了线程安全性
    21 *    3.兼备了高并发高效调用和延迟加载的优势!
    22 *
    23 * @version: v1.0.0
    24 * @author: Administrator
    25 * @date: 2019年3月27日 上午8:58:58 
    26 *
    27 * Modification History:
    28 * Date         Author          Version            Description
    29 *---------------------------------------------------------*
    30 * 2019年3月27日     Administrator           v1.0.0               修改原因
    31 */
    32 public class SingletonStaticInnerClass {
    33     
    34     private static class SingletonClassInstance{
    35         private static final SingletonStaticInnerClass instance= new SingletonStaticInnerClass();
    36     }
    37     
    38     private SingletonStaticInnerClass(){}
    39     
    40     
    41     public SingletonStaticInnerClass  getSingletonInstance(){
    42         return SingletonClassInstance.instance;
    43     }
    44 
    45 }

    常见的五中单例模式实现方式

    通过反射绕过单例的解决方案

    序列化_绕过单例模式的解决方案

    使用多线程测试不同单例实现方法的效率问题

    效率时间比较

  • 相关阅读:
    最小顶点覆盖,最大独立集,最小边覆盖
    Security Badges
    异常
    List和Set
    数据结构
    Collection集合
    Excel序号递增
    VM虚拟机桥接模式无法联网解决办法
    mybatis-Plus方法指定更新的字段
    maven项目 导出相关依赖包到指定文件夹
  • 原文地址:https://www.cnblogs.com/kangxinxin/p/10606706.html
Copyright © 2011-2022 走看看