首先来明确一个问题,那就是在某些情况下,有些对象,我们只需要一个就可以了,比如,一台计算机上可以连好几个打印机,但是这个计算机上的打印程序只能有一个,
这里就可以通过单例模式来避免两个打印作业同时输出到打印机中,即在整个的打印过程中我只有一个打印程序的实例。简单说来,单例模式(也叫单件模式)的作用就是保证在整个应用程序的生命周期中,任何一个时刻,单例类的实例都只存在一个(当然也可以不存在)。
单例模式的实例在全局中只有一个,并且该实例必须由自身创建,不能被克隆。一个标准的单例模式需要包含一下4个元素:
1.拥有一个私有的静态实例。
2.拥有私有的默认静态方法,防止使用构造函数进行实例化。
3.拥有一个静态工厂方法,并且必须是同步的。
4.重写clone()函数,并返回当前实例对象。
这里就可以通过单例模式来避免两个打印作业同时输出到打印机中,即在整个的打印过程中我只有一个打印程序的实例。简单说来,单例模式(也叫单件模式)的作用就是保证在整个应用程序的生命周期中,任何一个时刻,单例类的实例都只存在一个(当然也可以不存在)。
单例模式的实例在全局中只有一个,并且该实例必须由自身创建,不能被克隆。一个标准的单例模式需要包含一下4个元素:
1.拥有一个私有的静态实例。
2.拥有私有的默认静态方法,防止使用构造函数进行实例化。
3.拥有一个静态工厂方法,并且必须是同步的。
4.重写clone()函数,并返回当前实例对象。
下面是一个单例模式例子
package com.test.demos;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Properties;
public class PropertiesFactory {
private static PropertiesFactory _instance = null;
private Properties properties = new Properties();
private PropertiesFactory(){
try {
properties.load(new FileInputStream("user.properties"));
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
synchronized public static PropertiesFactory getInstance(){
if(_instance == null){
_instance = new PropertiesFactory();
}
return _instance;
}
public Object clone(){
return getInstance();
}
public String getConfig(String key){
return properties.getProperty(key);
}
}