单例设计模式
2013-12-19 19:16
183 查看
单例模式(Singleton)是指确保一个类有且仅有一个实例,而且自行实例化并向整个系统提供这个实例。这个类我们也称它为单例类。单例模式的使用在现实世界里很多,比如我们常见的打印机打印的作业队列,一个没打印完,那么只有在队列等待;windows回收站,windows视窗里回收站有且只有一个实例。
单例模式的目的就是有且只提供一个实例,所以它有一下几个特点:
1、单例类只能有一个实例;
2、单例类必须自己创建自己惟一的实例;
3、单例类必须给所有其他对象提供这一实例。
单例模式的一般结构如下:
上图可以看出,单例类自己提供一个实例给自己。
由于java语言的特点在单例的实现上有不同的做法,主要体现在单例类如何实例化自己上。基于上面三个特点我们可以有两种创建单例类实例的方法,第一个是提前创建好,用的时候直接使用;第二种是等到使用的时候再创建实例,业界称第一种为饿汉式,后者成为懒汉式。
饿汉式单例设计模式
Java代码
packagecom.pattern.singleton;
/**
*
*【描述】:饿汉式单例模式
*【作者】:alaric
*【时间】:Jul 8, 2012
*【文件】:com.pattern.singleton.HungrySingleton.java
*
*/
publicclass HungrySingleton {
//创建实例
private static final HungrySingleton singleton =new HungrySingleton();
//私有构造子
private HungrySingleton(){}
//静态工厂方法
public static HungrySingleton getInstance(){
return singleton;
}
}
懒汉式单例设计模式
Java代码
packagecom.pattern.singleton;
/**
*
*【描述】:懒汉式单例模式
*【作者】:alaric
*【时间】:Jul 8, 2012
*【文件】:com.pattern.singleton.LazySingleton.java
*
*/
public class LazySingleton {
//创建实例
private static LazySingleton singleton =null;
//私有构造子
private LazySingleton(){}
//静态工厂方法
synchronized public static LazySingleton getInstance(){
//如果为空就new一个实例
if(singleton==null){
singleton =new LazySingleton();
}
return singleton;
}
}
通过上面代码,可以看出他们之间的区别,相对而言单例设计模式比较简单,我们只要记住它的特点就可以简单掌握了。
单例模式的目的就是有且只提供一个实例,所以它有一下几个特点:
1、单例类只能有一个实例;
2、单例类必须自己创建自己惟一的实例;
3、单例类必须给所有其他对象提供这一实例。
单例模式的一般结构如下:
上图可以看出,单例类自己提供一个实例给自己。
由于java语言的特点在单例的实现上有不同的做法,主要体现在单例类如何实例化自己上。基于上面三个特点我们可以有两种创建单例类实例的方法,第一个是提前创建好,用的时候直接使用;第二种是等到使用的时候再创建实例,业界称第一种为饿汉式,后者成为懒汉式。
饿汉式单例设计模式
Java代码
packagecom.pattern.singleton;
/**
*
*【描述】:饿汉式单例模式
*【作者】:alaric
*【时间】:Jul 8, 2012
*【文件】:com.pattern.singleton.HungrySingleton.java
*
*/
publicclass HungrySingleton {
//创建实例
private static final HungrySingleton singleton =new HungrySingleton();
//私有构造子
private HungrySingleton(){}
//静态工厂方法
public static HungrySingleton getInstance(){
return singleton;
}
}
懒汉式单例设计模式
Java代码
packagecom.pattern.singleton;
/**
*
*【描述】:懒汉式单例模式
*【作者】:alaric
*【时间】:Jul 8, 2012
*【文件】:com.pattern.singleton.LazySingleton.java
*
*/
public class LazySingleton {
//创建实例
private static LazySingleton singleton =null;
//私有构造子
private LazySingleton(){}
//静态工厂方法
synchronized public static LazySingleton getInstance(){
//如果为空就new一个实例
if(singleton==null){
singleton =new LazySingleton();
}
return singleton;
}
}
通过上面代码,可以看出他们之间的区别,相对而言单例设计模式比较简单,我们只要记住它的特点就可以简单掌握了。
相关文章推荐
- 设计模式概述
- 设计模式之Factory(转)
- Java设计模式—singleton 单例
- 设计模式——控制反转&依赖注入
- head first 设计模式文摘
- Delphi模式设计
- PHP设计模式——备忘录模式
- 设计模式(三)装饰模式
- JAVA设计模式--策略模式
- 深入理解JavaScript系列(40):设计模式之组合模式
- JAVA设计模式之工厂方法模式
- JAVA设计模式十七--Composite(组合模式)
- JAVA设计模式---代理模式
- 设计模式_14:备忘录模式
- Java设计模式透析之 —— 适配器(Adapter)
- 设计模式之命令模式
- .Net中的设计模式——Factory Method模式
- 追MM和设计模式(转)
- CSS与HTML设计模式全集(350余种)
- C#设计模式之十五:Strategy模式(用diablo角色设计分析)