设计模式--单例模式
经典单例模式原理
单例模式的意义
有些对象我们只需要一个:线程池、缓存、硬件设备等
如果多个实例会有造成冲突、结果的不一致性等问题
是否可以用静态变量方式来实现?或者程序员之间协商个全局变量?
Yes
单例模式:确保一个类最多只有一个实例,并提供一个全局访问点
经典单例模式实现原理
经典单例模式代码示例
·经典单例类的Java代码
Singleton
public class Singleton {
private static Singleton uniqeInstance=null;
private Singleton(){
};
public static Singleton getInstance()
{
if(uniqeInstance==null)
{
uniqeInstance=new Singleton();
}
return uniqeInstance;
}
}
·一个简单的巧克力工厂项目代码
public class ChocolateFactory {
private boolean empty;
private boolean boiled;
public volatile static ChocolateFactory uniqueInstance = null;
private ChocolateFactory() {
empty = true;
boiled = false;
}
public static ChocolateFactory getInstance() {
if (uniqueInstance == null) {
synchronized (ChocolateFactory.class) {
if (uniqueInstance == null) {
uniqueInstance = new ChocolateFactory();
}
}
}
return uniqueInstance;
}
public void fill() {
if (empty) {
// 添加原料巧克力动作
empty = false;
boiled = false;
}
}
public void drain() {
if ((!empty) && boiled) {
// 排出巧克力动作
empty = true;
}
}
public void boil() {
if ((!empty) && (!boiled)) {
// 煮沸
boiled = true;
}
}
}
经典单例模式的优化
·多线程问题
·优化:
同步(synchronized)getInstance方法(比较消耗资源)
“急切”创建实例
双重检查加锁,volatile 使变量可见,synchronized 保证原子性