1、单例的实现
/** * 恶汉 * @author haokui * */ class Single_villian { private Single_villian() { } private static Single_villian s = new Single_villian(); public static Single_villian getSingle() { return s; } } /** * 懒汉 * @author haokui * */ class Single_lazy { private Single_lazy() { } private static Single_lazy s = null; public static synchronized Single_lazy getSingle() { if (s == null) { return new Single_lazy(); } return s; } } /** * 使用内部类来更好的实现单例模式 * @author haokui * */ class Single_internal { private Single_internal() { } public static Single_internal getSingle() { return Internal.s; } private static class Internal { public static Single_internal s = new Single_internal(); } }
第一种方式恶汉,饿汉式在类创建的同时就实例化一个静态对象出来,不管之后会不会使用这个单例,都会占据一定的内存,但是相应的,在第一次调用时速度也会更快,因为其资源已经初始化完成。
第二种懒汉。性能比较低,为了线程安全加了同步关键字。
第三种采用静态内部的方式来实现。外部类被加载的时候,内部类不会被加载,只有在调用内部类的静态方法或者属性的时候才会被加载,这样正好能保证只产生一个实例,而且不存在线程安全的问题。