单例模式:单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例单例模式。单例模式只应在有真正的“单一实例”的需求时才可使用。
(1)懒汉式实现示例代码如下:
/**
*
懒汉式单例实现的示例
*/
public class Singleton {
/**
*
定义一个变量来存储创建好的类实例
*/
private static Singleton uniqueInstance = null;
/**
*
私有化构造方法,可以在内部控制创建实例的数目
*/
private Singleton(){
//
}
/**
*
定义一个方法来为客户端提供类实例
* @return
一个
Singleton
的实例
*/
public static synchronized Singleton getInstance(){
//
判断存储实例的变量是否有值
if(uniqueInstance == null){
//
如果没有,就创建一个类实例,并把值赋值给存储类实例的变量
uniqueInstance = new Singleton();
}
//
如果有值,那就直接使用
return uniqueInstance;
}
/**
*
示意方法,单例可以有自己的操作
*/
public void singletonOperation(){
//
功能处理
}
/**
*
示意属性,单例可以有自己的属性
*/
private String singletonData;
/**
*
示意方法,让外部通过这些方法来访问属性的值
* @return
属性的值
*/
public String getSingletonData(){
return singletonData;
}
}
|
(2)饿汉式实现,示例代码如下:
/**
*
饿汉式单例实现的示例
*/
public class Singleton {
/**
*
定义一个变量来存储创建好的类实例,直接在这里创建类实例,只能创建一次
*/
private static Singleton uniqueInstance = new Singleton();
/**
*
私有化构造方法,可以在内部控制创建实例的数目
*/
private Singleton(){
//
}
/**
*
定义一个方法来为客户端提供类实例
* @return
一个
Singleton
的实例
*/
public static Singleton getInstance(){
//
直接使用已经创建好的实例
return uniqueInstance;
}
/**
*
示意方法,单例可以有自己的操作
*/
public void singletonOperation(){
//
功能处理
}
/**
*
示意属性,单例可以有自己的属性
*/
private String singletonData;
/**
*
示意方法,让外部通过这些方法来访问属性的值
* @return
属性的值
*/
public String getSingletonData(){
return singletonData;
}
}
|
饿汉式、懒汉式其实是一种比较形象的称谓。
所谓饿汉式,既然饿,那么在创建对象实例的时候就比较着急,饿了嘛,于是就在装载类的时候就创建对象实例,写法如下:
private static Singleton uniqueInstance = new Singleton();
所谓懒汉式,既然是懒,那么在创建对象实例的时候就不着急,会一直等到马上要使用对象实例的时候才会创建,懒人嘛,总是推托不开的时候才去真正执行工作,因此在装载对象的时候不创建对象实例,写法如下:
private static Singleton uniqueInstance = null;
而是等到第一次使用的时候,才去创建实例,也就是在getInstance方法里面去判断和创建
示例代码转自:http://student.csdn.net/space.php?uid=1294199&do=blog&id=48260