• 设计模式之单例模式


    单例模式

    简单来说,就是一个类只能有一个实例,并且在项目中都能访问这个实例。

    单例模式分为两大类

    • 懒汉模式:实例在第一次使用时就创建
    • 饿汉模式:实例在类装载时才被创建

    1. 饿汉模式

    • ‘ 饿汉模式 ’ 的代码如下
    class Singleton {
    	private static Singleton instance = new Singleton();
    	private Singleton(){}
    	public static Singleton getInstance() {
    		return instance;
    	}
    }
    
    1.2 由于instance的初始化是在类加载时进行的,类加载是由classloader实现的,如果初始化太早,容易造成资源浪费。

    2. 懒汉模式

    • ‘ 懒汉模式 ’ 的代码如下
    class Singleton {
    	private static volatile Singleton instance = null;
    	private Singleton(){}
    
    	public static Singleton getInstance() {
    		if(instance == null){
    			synchronized (Singleton.class) {
    				if(instance == null)
    				instance = new Singleton();
    			}
    		}
    		return instance;
    	}
    }
    
    • 这种方法每次在获取instance之前先进行判断,如果instance为空的话,就new一个出来,否则就返回之前已存在的instance。

    • 该方法虽然有些复杂,其中有两次的 if(instance == null) 判断,第一个解决了多线程时等待的效率问题,第二个则防止可能出现多个实例的情况,而volatile关键字起的作用则是禁止指令重排,这样对它的写操作就会有一个内存屏障,这样,在他的赋值完成之前,不会调用读操作。

  • 相关阅读:
    Android View部分消失效果实现
    Android TV Overscan
    一招搞定短信验证码服务不稳定
    揭秘:网上抽奖系统如何防止刷奖
    SVN迁移到GIT
    Android之高效率截图
    Android TV 开发(5)
    Android 标题栏(2)
    Android 标题栏(1)
    一步步教你学会browserify
  • 原文地址:https://www.cnblogs.com/mengzhao/p/10007992.html
Copyright © 2020-2023  润新知