Singleton:通常被用来代表那些本质上具有唯一性的系统组件。
import java.io.*;
public class Elvis {
    /*
    //Singleton with final filed
     * 好处:组成类的成员的声明很清楚地表明了一个类是一个singleton
     * 公有的静态域是final的,所以该域总是包含相同的对象引用,性能上稍微领先
    public static final Elvis INSTANCE = new Elvis();
    private Elvis(){
       //...
    }
    */
    //Singleton with static factory
    //好处:提供了灵活性(在不改变API的情况下,允许我们改变想法,把类做成singleton
    //或不做成singleton
    privatestaticfinal Elvis INSTANCE = new Elvis();
    private Elvis(){
       //...
    }
    publicstatic Elvis getInstance(){
       returnINSTANCE;
    }
    //为了使一个singleton类变成可序列化的,仅仅实现Serializable是不够的,因为一个序列化的实例在
    //每次返序列化时都会导致一个新的实例,所以必须提供一个readResolve方法
    //readReovle规范范:http://java.sun.com/j2se/1.3/docs/guide/serialization/spec/input.doc6.html         
private
Object readResolve() throws ObjectStreamException{
       /*
        * return the one true Elvis and let the garbage collector
        * take care of the Elvis impersonator(演员, 模拟(名人等的)艺人)
        */
       returnINSTANCE;
    }
    //Entry
     publicstaticvoid main(String[] args) {
            System.out.println(Elvis.INSTANCE);
        }

   

}

posted on 2008-04-22 18:38  wxf0701  阅读(410)  评论(0)    收藏  举报