zoukankan      html  css  js  c++  java
  • JAVA单例模式

    单例模式有两种设计:

    1. 延迟加载(懒汉式)
      • 私有构造方法
      • 创建本类对象,但不初始化
      • 创建静态方法进行初始化对象并返回
    2. 立即加载(饿汉式)
      • 私有构造方法
      • 创建本类的对象并初始化(私有的)
      • 创建静态方法获取本类对象

    举例1.

    /**
     * 延迟加载(懒汉式)
     *  1.私有构造方法
     *  2.创建本类对象,但不初始化
     *  3.创建静态方法进行初始化对象并返回
     *
     *  优点:
     *      使用到类的对象才会加载,不消耗内存
     *  缺点:
     *      可能会出现线程安全问题,但是可以使用同步代码块消除这个安全问题
     *
     */
    
    public class SingleExample {
    
        private SingleExample(){}
    
        // 创建本类对象,不初始化
        private  static SingleExample instance ;
    
        private static  SingleExample getInstance(){
            if (instance == null) {
                // 同步代码块
                synchronized (SingleExample.class) {
                    if (instance == null) {
                        instance = new SingleExample();
                    }
                }
            }
            return instance;
        }
    
        public static void main(String[] args) {
            System.out.println("1." + SingleExample.getInstance());
            System.out.println("2." + SingleExample.getInstance());
            System.out.println("3." + SingleExample.getInstance());// 均是同一个对象,在同一个内存中
        }
    
    }

    举例2.

    /**
     * 立即加载(饿汉式)
     *  1.私有构造方法
     *  2.创建本类的对象并初始化(私有的)
     *  3.创建静态方法获取本类对象
     *
     *  优点:
     *      保证的线程的安全,没有线程安全问题
     *  缺点:
     *      使用类就会加载,比较消耗内存
     */
    public class ImmediateSingle {
    
        private ImmediateSingle(){}
    
        private static ImmediateSingle instance = new ImmediateSingle();
    
        public static ImmediateSingle getInstance(){
            return instance;
        }
    }
  • 相关阅读:
    小球掉落
    String当中与转换相关常用的方法有
    字符串的截取方法
    golang 管道
    golang--协程之间通信的方式
    golang--goroutine
    go 时间操作
    吉格勒定理
    检视阅读
    git branch -a发现分支显示不全
  • 原文地址:https://www.cnblogs.com/xiao-apple36/p/13097847.html
Copyright © 2011-2022 走看看