java设计模式面试

设计模式

1. 单例模式:饱汉、饿汉。以及饿汉中的延迟加载,双重检查

单例模式

分类:懒汉式单例、饿汉式单例、登记式单例

特点:
  1、单例类只能有一个实例。
  2、单例类必须自己自己创建自己的唯一实例。
  3、单例类必须给所有其他对象提供这一实例。

单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例

应用场景:线程池、缓存、日志对象、对话框、打印机、显卡的驱动程序对象常被设计成单例

 懒汉式,线程不安全
1 public class Singleton {
private static Singleton instance;
private Singleton (){} public static Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
}
懒汉式,线程安全,不高效
public static synchronized Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}

双重检查锁模式

 public class Singleton {
private volatile static Singleton instance; //声明成 volatile
private Singleton (){} public static Singleton getSingleton() {
if (instance == null) {
synchronized (Singleton.class) {
if (instance == null) {
instance = new Singleton();
}
}
}
return instance;
} }

饿汉式

 public class Singleton{
//类加载时就初始化
private static final Singleton instance = new Singleton(); private Singleton(){} public static Singleton getInstance(){
return instance;
}
}

静态内部类的写法(推荐)懒汉式

 public class Singleton {
private static class SingletonHolder {
private static final Singleton INSTANCE = new Singleton();
}
private Singleton (){}
public static final Singleton getInstance() {
return SingletonHolder.INSTANCE;
}
}

Singleton通过将构造方法限定为private避免了类在外部被实例化

完美的解释http://wuchong.me/blog/2014/08/28/how-to-correctly-write-singleton-pattern/

上一篇:tc令牌桶限速心得


下一篇:在android工程中添加图片资源(转加)