本文是java简单实现singleton,用代码体会它
什么是singleton?
在new之前,需要判断是否存在实例(如果存在,返回它;如果不存在,生成实例)。如:
static public Singleton instance() {
if (null == _instance) {
_instance = new Singleton();
}
return _instance;
}
static private Singleton _instance = null;
singleton有哪些用途?
比如统计网站访问量,数据库连接池。就是能使用它特性的地方(废话)。
以下是代码:
PatternSingleton: singleton类
PatternSingletonTest: singleton类的测试
/**
* A utility class of which at most one instance can exist per VM.
*
* Use Singleton.instance() to access this instance.
* From: http://radio.weblogs.com/0122027
* /stories/2003/10/20/implementingTheSingletonPatternInJava.html
*/
public class PatternSingleton {
/**
* A handle to the unique Singleton instance.
*/
static private PatternSingleton _instance = null;
private int count;
/**
* The constructor could be made private to prevent others from
* instantiating this class. But this would also make it impossible to
* create instances of PatternSingleton subclasses.
*/
protected PatternSingleton() {
count=0;
}
/**
* @return The unique instance of this class.
*/
static public PatternSingleton instance() {
if (null == _instance) {
_instance = new PatternSingleton();
}
return _instance;
}
// . ...additional methods omitted...
public int getCount(){
return count;
}
public void setCount(int cou){
count=cou;
}
public void addCount(){
count++;
}
}
public class PatternSingletonTest {
public static void main(String args[]){
PatternSingleton test = PatternSingleton.instance();
printCount(test,"Original instance ");
test.addCount();
printCount(test,"Original instance add");
test.setCount(10);
printCount(test,"Original instance set");
//another instance
PatternSingleton test1 = PatternSingleton.instance();
printCount(test1,"Another instance");
test1.setCount(5);
printCount(test,"Another instance set");
printCount(test,"Original instance set");
//reset
}
public static void printCount(PatternSingleton test,String str1){
String str=str1+"\tThe count is :"+test.getCount();
System.out.println(str);
}
}
更多资源:
单例模式的一个疑问
http://www.ibm.com/developerworks/cn/java/designpattern/singleton/
http://www.javaworld.com/columns/jw-java-design-patterns-index.shtml
http://www.javaworld.com/javaworld/jw-04-2003/jw-0425-designpatterns.html?page=1