(Item 2) singleton
//use final field
public class Elvis {
public static final Elvis INSTANCE = new Elvis(); //public field
private Elvis() { .. }
}
//use static factory, give you flexibility to decide whether the class should be a singleton without changing API
public class Elvis {
private static final Elvis INSTANCE = new Elvis(); //private field
private Elvis() { .. }
public static Elvis getInstance() { return INSTANCE; }
}