Android设计模式(单例模式)

2019-02-13  本文已影响0人  积木Blocks

目录



1.单例模式(Singleton)


2.单例模式关键点


3.单例模式UML图


4.单例模式的实现方式


4.1 饿汉式单例(Eager Singleton)
public class Singleton {
    //1.创建私有静态成员变量并实例化
    private static Singleton mSingleton = new Singleton();

    //2.将构造函数私有化,使外界无法直接实例化
    private Singleton() {
    }

    //3.提供公开方法返回创建的实例化对象
    public static Singleton getInstance() {
        return mSingleton;
    }
}
4.2 经典的懒汉式单例(Lazy Singleton)【不推荐】
public class Singleton {

    private Singleton() {}

    private static Singleton instance=null;

    public static Singleton getInstance() {
         if (instance== null) {  
             instance= new Singleton();
         }  
        return instance;
    }
}
4.3 加同步锁的懒汉式
public class Singleton {

    private Singleton() {}

    private static Singleton instance=null;

    public static synchronized Singleton getInstance() {
         if (instance== null) {  
             instance= new Singleton();
         }  
        return instance;
     }
}
4.4 DCL懒汉式
public class Singleton {
    private static Singleton instance = null;
    public  static Singleton getInstance() {
        if(null == instance) {    // 线程二检测到instance不为空
            synchronized (Singleton.class) {
                if(null == instance) {                    
                    instance = new Singleton();    // 线程一被指令重排,先执行了赋值,但还没执行完构造函数(即未完成初始化)    
                }
            }
        }
       
        return instance;    // 后面线程二执行时将引发:对象尚未初始化错误
    }
}
4.5 枚举 【不推荐】
enum Singleton{
    INSTANCE;
}
4.6 静态内部类【推荐】
public class Singleton {

    private Singleton(){
    }

    private static class SingletonHolder{
        private final static Singleton instance=new Singleton();
    }

    public static Singleton getInstance(){
        return SingletonHolder.instance;
    }

}

静态内部类因为只会加载一次,所以保证了线程安全。
内部类是在第一次使用的时候才会进行加载,实现了懒加载


5.单例模式的使用场景


6.单例模式和静态类的区别

http://blog.sina.com.cn/s/blog_4adc4b090102w1j1.html


7.单例模式相关面试题

一般引入单例模式的相关问题有两种情况,一是简单粗暴直接问你会什么设计模式,二是问你第三方的框架,然后问框架用了哪些设计模式,比如EventBus用了DCL的单例。

上一篇 下一篇

猜你喜欢

热点阅读