zoukankan      html  css  js  c++  java
  • 单例模式的学习

    单例模式

    • 类构造器私有
    • 持有自己类型的属性
    • 对外提供获取实例的静态方法

    意图:保证一个类仅有一个实例,并提供一个访问它的全局访问点。

    主要解决:一个全局使用的类频繁地创建与销毁。

    何时使用:当您想控制实例数目,节省系统资源的时候。

    如何解决:判断系统是否已经有这个单例,如果有则返回,如果没有则创建。

    关键代码:构造函数是私有的。

    单例模式又分为多种方式

    推荐使用的是双重锁模式,性能高,具体其他模式可见链接:https://www.jianshu.com/p/3bfd916f2bb2

    public class Singleton {  
        private volatile static Singleton singleton;  
      或者
      
    private volatile static Singleton singleton=null;
      
    //让构造函数为 private,这样该类就不会被实例化
      private Singleton (){}
     //获取唯一可用的对象
    public static Singleton getSingleton() {
    if (singleton == null) {  
            synchronized (Singleton.class) {  
            if (singleton == null) {  
                singleton = new Singleton();  
            }  
            }  
        }  
        return singleton;  
        }  
    }
    双重检查模式,进行了两次的判断,第一次是为了避免不要的实例,第二次是为了进行同步,避免多线程问题。由于singleton=new Singleton()对象的创建在JVM中可能会进行重排序,在多线程访问下存在风险,使用volatile修饰signleton实例变量有效,解决该问题。
  • 相关阅读:
    android 休眠唤醒机制分析(三) — suspend
    android 休眠唤醒机制分析(一) — wake_lock
    开机音乐不发声的问题
    Linux的时钟管理
    Android4.2增加新键值
    _IO, _IOR, _IOW, _IOWR 宏的用法与解析
    Mifare 0简介
    Mifare 1卡的存储结构
    Maven 介绍
    DAL 层引用 System.Net.Http ,引发的一阵心慌
  • 原文地址:https://www.cnblogs.com/cherishforchen/p/11627402.html
Copyright © 2011-2022 走看看