美文网首页
单例模式

单例模式

作者: 台风口的猪 | 来源:发表于2020-09-30 09:57 被阅读0次

    1.保证从系统启动到系统停止,全过程只会产生一个实例
    2.当我们在应用中遇到功能性冲突的时候,需要使用单例模式

    /**
     * 懒汉式(静态内部类)
     */
    public class SinglePattern {
    
        /**
         * 将默认构造器私有化
         */
        private SinglePattern() { }
    
        /**
         * 1. 可以先声明一个静态内部类 (解决反射破坏问题)
         * 2, 也可以不使用静态内部类 直接使用  private static final  SinglePattern SINGLE_PATTERN = new SinglePattern();
         *      然后在getInstance()方法中直接  return SINGLE_PATTERN;
         * private 私有保证别人不能修改
         *
         */
        public static class LazyHolder{
    // final 为了防止内部误操作,代理模式,Cglib的代理模式,如果不是final子类是可以重新赋值的
            private static final  SinglePattern SINGLE_PATTERN = new SinglePattern();
        }
    
        /**
         * 同样提供静态方法获取实例
         * final 确保别人不能覆盖
         * @return
         */
        public static final SinglePattern getInstance(){
            // 静态方法中的逻辑,是要在用户调用的时候才开始执行的
            // 方法中实现逻辑需要分配内存,也是调用时才分配的
            return LazyHolder.SINGLE_PATTERN;
    //        return SINGLE_PATTERN;
        }
        //不管该class有没有实例化,static静态块总会在classLoader执行完以后,就加载完毕
        static{
         // 静态块中的内容,只能访问静态属性和静态方法
         // 只要是静态方法或者属性,直接可以用Class的名字就能点出来
         // JVM内存中的静态区,这一块的内容是公共的,与静态方法不同,静态代码块不管是否调用就直接在加载完毕后分配内存空间,放在那里
        }
    }
    
    /*
    * 类装载到JVM中的过程
        // 1. 从上往下
        // 2. 先属性、后方法
        // 3. 先静态、后动态
    */
    
    

    相关文章

      网友评论

          本文标题:单例模式

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