单例模式的特点:
单例类只能有一个实例;
单例类必须自己创建自己一个实例;
单例类必须给所有其他对象提供这一事例。 -----转自 阎宏《java与模式》
package com.xzy;
//饿汉模式
class Singleton{
private Singleton(){
}
private static final Singleton singleton = new Singleton();
public static Singleton getInstance(){
return singleton;
}
public void say(){
System.out.println("I am saying");
}
}
public class SingletonDemo{
public static void main(String[] args){
Singleton s = Singleton.getInstance();
s.say();
}
}
//懒汉模式
class Singleton{
private static Singleton singleton = null;
public static synchronized Singleton getInstance(){
if(singleton == null){
singleton = new Singleton();
}
return singleton;
}
public void say(){
System.out.println("I am saying.........");
}
}
public class SingletonDemo{
public static void main(String[] args){
Singleton singleton = Singleton.getInstance();
singleton.say();
}
}
注意到懒汉形式中的synchronized,这个synchronized很重要,如果没有synchronized,那么使用getInstance()是有可能得到多个
Singleton实例。
一般来说第一种比较安全