简单的介绍Android的一些设计模式。
一.单例模式
单例模式一般有“饿汉式”和"懒汉式"。
单例模式是一种常用的软件设计模式,其定义是单例对象的类只能允许一个实例存在。
1.常用的饿汉式写法(不推荐使用)
public class Singleton {
private final static Singleton INSTANCE = new Singleton();
private Singleton(){}
public static Singleton getInstance(){
return INSTANCE;
}
}
优点:这种写法比较简单,就是在类装载的时候就完成实例化。避免了线程同步问题。
缺点:在类装载的时候就完成实例化,没有达到Lazy Loading的效果。如果从始至终从未使用过这个实例,则会造成内存的浪费。
2.懒汉式写法(推荐使用)
/**
* volatile 是一个类型修饰符(type specifier).volatile的作用是作为指令关键字,确保本条指令不会因编译器的优化而省略,且要求每次直接读值。
*/
private static volatile Singleton sSingleton;
private Singleton() {
}
/**
* 双重检查 推荐使用
* synchronized 关键字,代表这个方法加锁,相当于不管哪一个线程(例如线程A),运行到这个方法时,都要检查有没有其它线程B(或者C、 D等)正在用这个方法
*/
public static Singleton getInstance() {
if (sSingleton == null) {
synchronized (Singleton.class) {
if (sSingleton == null) {
sSingleton = new Singleton();
}
}
}
return sSingleton;
}
优点:避免了线程不安全,延迟加载,效率高。
参考链接