设计模式之单例模式

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

第一种方式恶汉,饿汉式在类创建的同时就实例化一个静态对象出来,不管之后会不会使用这个单例,都会占据一定的内存,但是相应的,在第一次调用时速度也会更快,因为其资源已经初始化完成。

第二种懒汉。性能比较低,为了线程安全加了同步关键字。

第三种采用静态内部的方式来实现。外部类被加载的时候,内部类不会被加载,只有在调用内部类的静态方法或者属性的时候才会被加载,这样正好能保证只产生一个实例,而且不存在线程安全的问题。

原文地址:https://www.cnblogs.com/hkdpp/p/9072224.html