单例模式的N种写法
鲁迅在《孔乙己》说孔乙己会写N种不同的回字, 回、囘、囬…… 。那今天我们来写几种常见的单例模式。单例模式在所有的设计模式书籍里都是作为第一个模式来讲解,因为它给人简单易于理解的感觉,但是真正写好一个单例模式,并能分析出不同写法的利弊还是需要花点功夫。一般单例模式实现的主要思想是把类的构造函数私有化,使之不能进行new。 单例模式一般主要看两个方面: 对象是否延迟初始化 初始化过程是否是线程安全的 这里我们在写单例之前先把验证上述的两个方面的代码先贴一下,下面的单例我们都通过下面代码来验证: 类加载是是否进行初始化,我们在单例的构造函数里打印一句话 // 测试延迟初始化代码 //类全路径名,记得测试时替换掉 Class.forName("com.yao.single.xx.Singleton"); System.out.println("singleton has been loaded"); TimeUnit.SECONDS.sleep(3); Singleton singleton=Singleton.getInstance(); singleton.sayHello(); 测试初始化线程安全代码:这里仅仅是打印出每个线程拿到的对象是否是同一个对象,思路是通过设置CountDownLatch,来同时去获取实例,打印出来实例toString,来判断对象是否是同一个