写在之前的话,刚才我看了一篇关于单例模式的文章,上面写道了单例模式的两种实现方式,但是名字完全不叫懒汉式和饿汉式。而是叫青梅竹马和一见钟情,我觉得很形象啊,青梅竹马就是从小就在一起,很匹配。一见钟情就是刚开始没有对象,之后见一面就定了,觉得名字很好听还有形象在这里分享一下,然后上面还有一句话说的是:单例学得好,老婆少不了,我觉得吧,既然是单例了肯定就一个对象了,怎么可能有那么多老婆。
总结:单例模式就是指:你就一个对象,不管咋样你就一个对象。不多不少就一个。
在写那个单例最简方式之前,先把懒汉和饿汉式写出来
懒汉式(一见钟情)
public class Singleton{
private Singleton(){}
private static Singleton singleton = null; //不建立对象
public static synchronized Singleton getInstance(){
if(singleton == null) { //先判断是否为空
singleton = new Singleton (); //懒汉式做法
}
return singleton ;
}
public void exec_method(){...}
}
饿汉式(青梅竹马)
public class Singleton{
public Singleton(){}
private static Singleton singleton = new Singleton(); //建立对象
public static Singleton getInstance(){
return singleton ;//直接返回单例对象
}
public void exec_method(){...}
}
最简式(两小无猜)
public enum Singleton{
INSTANCE;
public void exec_method(){...}
}
枚举实现,无偿地提供序列化机制,绝对防止多次实例化,即使在面对复杂的序列化或者反射攻击的时候。
虽然这种方法还没有广泛采用,但是单元素的枚举类型已经成为实现单例的最佳方法
这是在<effective java>第一章,第三条,用私有构造器或者枚举类型强化单例模式