单例
这是一种简单、安全的方式,这种写法即使在多线程下也不会出现安全问题:
public class SingleInstance {
private static SingleInstance instance = new SingleInstance();
private SingleInstance() {}
public static SingleInstance getInstance() {
return instance;
}
}
懒加载
public class SingleInstance {
private static volatile SingleInstance instance;
private SingleInstance() {}
public static SingleInstance getInstance() {
if (instance == null) { // 减少线程进入竞争队列
synchronized (SingleInstance.class) {
if (instance == null) { // 在多个线程进入竞争队列后,再次判断
instance = new SingleInstance();
}
}
}
return instance;
}
}
责任链
比如 Tomcat 中的 Filter,递归责任链
public class CustomFilter implements Filter {
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) {
preHandle();
chain.doFilter(request, response);
postHandle();
}
}