剖析经典的单件模式实现 --> public class Singleton ... { private static Singleton uniqueInstance; private Sigleton() ...{} public static Singleton getInstance() ...{ if (uniqueInstance == null) ...{ uniqueInstance = new Singleton(); } return uniqueInstance; }} 巧克力工厂 --> public class ChocolateBoiler ... { private boolean empty; private boolean boiled; public static ChocolateBoiler() ...{ empty = true; boiled = false; } public void fill() ...{ if (isEmpty()) ...{ empty = false; boiled = true; //在锅炉内填满巧克力和牛奶的混合物 } } public void drain() ...{ if (!isEmpty() && isBoiled()) ...{ //排出煮沸的巧克力和牛奶 empty = true; } } public void boil() ...{ if (!isEmpty() && isBoiled()) ...{ //将炉内煮沸 boiled = true; } } public boolean imEmpty() ...{ return empty; } public boolean isBoiled() ...{ return boiled; }} 改进 --> public class ChocolateBoiler ... { private boolean empty; private boolean boiled; private static ChoclateBoiler uniqueInstance; /**//* private ChocolateBoiler() { empty = true; boiled = false; } */ public static Chocolate getInstance() ...{ private ChocolateBoiler() ...{ empty = true; boiled = false; } if (uniqueInstance == null) ...{ uniqueInstance = new ChocolateBoiler(); } //别忘了这个 return uniqueInstance; } public void fill() ...{ if (isEmpty()) ...{ empty = false; boiled = true; //在锅炉内填满巧克力和牛奶的混合物 } } public void drain() ...{ if (!isEmpty() && isBoiled()) ...{ //排出煮沸的巧克力和牛奶 empty = true; } } public void boil() ...{ if (!isEmpty() && isBoiled()) ...{ //将炉内煮沸 boiled = true; } } public boolean imEmpty() ...{ return empty; } public boolean isBoiled() ...{ return boiled; }} ===================================================================== 单件模式:确保一个类只有一个实例,并提供一个全局访问点。 ===================================================================== 处理多线程 --> public class Singleton ... { private static Singleton uniqueInstance; private Sigleton() ...{} //Synchronized public static Synchronized Singleton getInstance() ...{ if (uniqueInstance == null) ...{ uniqueInstance = new Singleton(); } return uniqueInstance; }} 使用“急切”创建实例 --> public class Singleton ... { private static Singleton uniqueInstance = new Singleton(); private Singleton() ...{} public static Singleton getInstance() ...{ return uniqueInstance; }} 使用“双重检查锁”,在getInstance()中减少使用同步 public class Singleton ... { //volatile private volatile static Singleton uniqueInstance; private Singleton() ...{} public static Singleton getInstance() ...{ if (uniqueInstance == null) ...{ synchronized (SIngleton.class) ...{ if (uniqueInstance == null) uniqueInstance = new Singleton(); } } return uniqueInstance; }} 一个类,一个责任。