经典:单件模式(Singleton Pattern)
2007-12-05 10:10
260 查看
剖析经典的单件模式实现-->
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;
}
}
一个类,一个责任。
相关文章推荐
- 单件模式的经典代码
- ccflow 流程设计器“经典模式”运行,在途列表里的“撤销发送”不好用
- 单件模式
- JavaScript学习笔记(三十一) 经典继承模式
- 设计模式:单件模式(5)C++版
- 经典Servlet+JSP+JavaBean开发模式(MVC)原理与创建工程
- JavaScript学习笔记(三十二) 经典继承模式二-借用构造方法
- 设计模式之单件模式
- 博客园设计模式经典汇集
- Java经典23种设计模式之创造型模式(一)
- 结合PHP -----浅谈设计模式之单件模式
- 单件模式(Singleton Pattern)
- 浅谈单件模式(单例模式--Singleton Pattern)
- Java经典23种设计模式之结构型模式(一)
- 23个经典JDK设计模式
- 单件模式(Singleton Pattern)
- 经典模式和集成模式web.config修改
- NET中的设计模式---单件模式
- 软件的架构与模式之经典架构模式简介