• 设计模式一之单例模式


    一、单例模式:

      一个类在系统中只有一个实例。

      要点:

    • 私有的构造方法
    • 指向自己实例的私有静态引用
    • 以自己实例为返回值的静态的公有的方法

      单例模式根据实例化对象时机的不同分为两种:

          1.1、饿汉式单例

            饿汉式单例在单例类被加载时候,就实例化一个对象交给自己的引用

    /**
     * 饿汉式单例
     */
    public class SingletonEh {
    
        private SingletonEh() {}
        /**
         * 类初始化时加载,只加载一次,线程安全
         * 没有 延迟加载 的优势,如果该实例很大,会比较耗费资源。
         */
        private static final SingletonEh single = new SingletonEh();
    
        /**
         * 没有同步synchronized,调用效率高
         * @return
         */
        public static SingletonEh getInstance() {
            return single;
        }
    }

        1.2、懒汉式单例

      而懒汉式在调用取得实例方法的时候才会实例化对象

    /**
     * 懒汉式单例
     */
    public class SingletonLh {
    
        private SingletonLh() {}
        /**
         * 类初始化时不加载
         */
        private static  SingletonLh single;
    
        /**
         * 同步synchronized,线程安全,调用效率低
         * @return
         */
        public static synchronized SingletonLh getInstance() {
    
            if(null==single){
                single=new SingletonLh();
            }
            return single;
        }
    }

      1.3、双重锁形式-

    PS:我不用这个写法的

    public class Singleton{    
        private static volatile Singleton instance=null;    
        private Singleton(){}    
        public static  Singleton getInstance(){        
            if(instance==null){            
                synchronized(SingletonClass.class){                
                    if(instance==null){
                        instance=new Singleton();
                    }
                }
            }        
            return instance;
         }
    }    
    

      1.4、静态内部类形式

    /**
     * 匿名内部类方式单例
     * 即有延迟加载的优势,又是线程安全的
     */
    public class SingletonInner {
    
        /**
         *内部类持有单例对象
         */
        private static class SingletonHolder {
           private static final SingletonInner single = new SingletonInner();
        }
    
        private SingletonInner(){}
    
        /**
         * 调用的时候才会加载single且只加载一次,线程安全,调用效率高
         * @return
         */
        public static final SingletonInner getInstance() {
           return SingletonHolder.single;
        }
    
    
    }
    

      

      

  • 相关阅读:
    ubuntu 查看进程,查看服务
    ubuntu16.04下配置静态ip
    php监听客户端连接状态
    Excel有用的宏
    openfire插件开发1
    linux ps命令
    转:linux下面/usr/local和opt目录有何区别
    linux 开机自启动软件(包含xampp方法)
    转:java两个jre目录和三个lib目录
    linux PATH环境变量
  • 原文地址:https://www.cnblogs.com/geekdc/p/8603554.html
Copyright © 2020-2023  润新知