单例(Singleton)模式概述

单例模式


单例模式的特点:



单例类只能有一个实例;

单例类必须自己创建自己一个实例;

单例类必须给所有其他对象提供这一事例。                -----转自 阎宏《java与模式》







      

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();  
        }  
    } 

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();
}
}







Java代码 
//懒汉模式  
      
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();  
        }  
    } 

//懒汉模式

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实例。
一般来说第一种比较安全

猜你喜欢

转载自20120923lina.iteye.com/blog/1689615