• 6、单例模式 Singleton模式 只有一个实例 创建型模式


    1Singleton

    java . lang . string- -- -10001000西-- Singleton --Singleton

    访访

    使

    使

    Java

    饿

    2

    getInstance线

    getInstance2线使

    package cn.design.single;


    import java.lang.reflect.Constructor;
    import java.lang.reflect.Field;
    import java.lang.reflect.InvocationTargetException;

    /**
    * @author by lin
    * @Classname LazyMan
    * @Description 
    * @Date 2020/4/12 16:36
    * @Created in 2020/4/12 16:36 by lin
    */
    public class LazyMan {
       // ,  
       private static boolean flag = false;

       // ,
       private LazyMan() {
           synchronized (LazyMan.class) {
               if (!flag) {
                   flag = true;
              } else {
                   throw new RuntimeException("使 ");
              }
          }
      }

       // 
       private volatile static LazyMan lazyMan = null;

       //线 
       public static LazyMan getInstance() {
           if (lazyMan == null) {
               lazyMan = new LazyMan();
          }
           return lazyMan;
      }

       //  
       public static LazyMan getInstance2() {
           if (lazyMan == null) {
               synchronized (LazyMan.class) {
                   if (lazyMan == null) {
                       // 
                       lazyMan = new LazyMan();
                       // 
                       /*
                        * 
                        * 1
                        * 2
                        * 3
                        *
                        * 123 
                        * 132 
                        *     A 线 3
                        *     B 线 lazyMan  new 2    
                        *      volatile  
                        */
                  }
              }
          }
           return lazyMan;
      }

       //   
       public static void main(String[] args) throws NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException, NoSuchFieldException {
           Field flag = LazyMan.class.getDeclaredField("flag");
           flag.setAccessible(true);
           Constructor<LazyMan> declaredConstructor = LazyMan.class.getDeclaredConstructor();
           declaredConstructor.setAccessible(true);
           LazyMan instance1 = declaredConstructor.newInstance();
           System.out.println(instance1);
           //   flag
           flag.set(instance1, false);
    //       LazyMan instance = LazyMan.getInstance2();
    //       System.out.println(instance);
           Constructor<LazyMan> declaredConstructor2 = LazyMan.class.getDeclaredConstructor();
           declaredConstructor2.setAccessible(true);
           LazyMan instance3 = declaredConstructor2.newInstance();
           System.out.println(instance3);
      }

    }

    2饿

    package cn.design.single;

    /**
    * @author by lin
    * @Classname HungryMan
    * @Description 饿
    * @Date 2020/4/12 16:48
    * @Created in 2020/4/12 16:48 by lin
    */
    public class HungryMan {

       private HungryMan() {
      }

    //   private byte[] byte=new byte[1024];

       private static final HungryMan hungryMan = new HungryMan();

       public static HungryMan getInstance() {
           return hungryMan;
      }
       // :   
       // byte  

    }

    3

    package cn.design.single;

    /**
    * @author by lin
    * @Classname Holder
    * @Description 
    * @Date 2020/4/12 16:50
    * @Created in 2020/4/12 16:50 by lin
    */
    public class Holder {
       private Holder(){}

       public static Holder getInstance(){
           return InnerClass.HOLDER;
      }

       public static class InnerClass{
           private static final Holder HOLDER = new Holder();

      }

    }

    4

    package cn.design.single;

    import java.lang.reflect.Constructor;
    import java.lang.reflect.InvocationTargetException;

    /**
    * @author by lin
    * @Classname EnumSingle
    * @Description TODO
    * @Date 2020/4/12 18:12
    * @Created in 2020/4/12 18:12 by lin
    */

    // 1.5 
    // enum  class 

    public enum EnumSingle {
      INSTANCE;

      public EnumSingle getInstance() {
          return INSTANCE;
      }
    }
    class test{
      public static void main(String[] args) throws NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException {
          EnumSingle instance1 = EnumSingle.INSTANCE;
          EnumSingle instance2 = EnumSingle.INSTANCE;
          System.out.println("instance1 = " + instance1);
          System.out.println("instance2 = " + instance2);
          // 使 
          Constructor<EnumSingle> declaredConstructor = EnumSingle.class.getDeclaredConstructor(String.class, int.class);
          declaredConstructor.setAccessible(true);
          EnumSingle newInstance = declaredConstructor.newInstance();
          System.out.println(newInstance);

          /* 
            * class,  Enum
            * idea   javap -p xxx.class , , 
            * 使jad ,     String , int 
            *    Cannot reflectively create enum objects
            * declaredConstructor.newInstance();   : , create enum objects
            */
      }
    }

    5

    线线饿使 lazy loading 使

    线

    • 使


                    

    圈~

     注公众号,  转载请备注来源,和链接

  • 相关阅读:
    函数防抖和函数节流.md
    es6的展开运算符.md
    web安全-xss.md
    es6 数组实例中的find() 和 findIndex() 方法.md
    vuex的学习
    利用nodejs搭建本地服务器.md
    webpack的配置学习
    npm常用命令
    配置phpstorm支持less自动编译css
    Nginx配置中遇到到的问题和解决方案
  • 原文地址:https://www.cnblogs.com/naimao/p/13353468.html
Copyright © 2020-2023  润新知