设计模式GOF23之单例模式实现

package com.bjsxt.cn.singleton;/*** 饿汉式创建单例模型* 饿汉式单例模型的特点:* 1, 私有的该类对象静态属性* 2, 私有的构造器* 3, 公共的静态方法访问静态属性(因此需要时静态的环境)* @author wanna**/public class SingletonDemo1 {//饿汉式,饿,非常饿,上来就吃了//类初始化的时候,立即加载这个对象(没有延时加载的能力)。如果加载该类非常复杂,而在之后却又并没有访问该对象,,造成资源的狼粪//由于加载类是天然线程安全的,所以饿汉式单例模式线程安全private static SingletonDemo1 instance = new SingletonDemo1();private SingletonDemo1() {}//该访问方法没有同步synchronized,因此调用效率高public static SingletonDemo1 getInstance() {return instance;}}package com.bjsxt.cn.singleton;/*** 2015年3月26日22:14:30* 懒汉式单例模式* 该懒汉式的特点是:* 1, 构造器私有* 2, 私有静态属性,类型为该类的对象,但是在声明时并没有初始化。因为Lazy load。因为懒惰* 3, 静态访问私有的那个静态属性的静态方法。但是在该方法体中先要检查该静态属性是否为空,为空则new,否则直接返回* * @author wanna**/public class SingletonDemo2 {private SingletonDemo2() {}private static SingletonDemo2 instance;//因为该方法加了同步synchronized,效率低,但是具有延时加载的能力。提高了资源的利用率public static synchronized SingletonDemo2 getInstance() {if (instance == null) {instance = new SingletonDemo2();}return instance;}}package com.bjsxt.cn.singleton;/*** 2015年3月26日22:14:38* * 测试双重检测锁式单例模式* 双重检测锁式单例模式的特点与懒汉式相似,但最重要的区别是在访问静态属性的实例时的过程* * 但是由于编译器底层优化和JVM内部模型,偶尔会出问题,不建议使用* @author wanna**/public class SingletonDemo3 {private static SingletonDemo3 instance = null;private SingletonDemo3() {}//该方法把懒汉式单例模式中的synchronized同步下移到if中,提高了执行效率,不用每次获取对象时都需要进行同步。//只有第一次创建需要同步,之后就不需要了。public static SingletonDemo3 getInstance() {if (instance == null) {SingletonDemo3 sc;synchronized(SingletonDemo3.class) {sc = instance;if (sc == null) {synchronized(SingletonDemo3.class) {if (sc == null) {sc = new SingletonDemo3();}}instance = sc;}}}return instance;}}package com.bjsxt.cn.singleton;/*** 2015年3月26日22:14:45* 静态内部类实现单例模式* 这种方式线程安全,执行效率高,并且可以延时加载* 特点:* 1, 构造器私有* 2, 静态属性修改为静态内部类,在内部类中定义了外部类的静态final属性(好像删去final也不影响)* 3, 静态访问静态属性的方法,在方法体重返回在内部类new出来的外部封装类对象。也就实现了延时加载 * @author wanna**/public class SingletonDemo4 {private static class SingltonClassInstance {private static SingletonDemo4 instance = new SingletonDemo4();}public static SingletonDemo4 getInstance() {return SingltonClassInstance.instance;}private SingletonDemo4() {}}package com.bjsxt.cn.singleton;/*** 测试枚举实现单例模式(没有延时加载)* @author wanna**/public enum SingletonDemo5 {Instance;//该枚举元素本身就是单例对象//添加自己需要的操作public void operation() {}}

从哪里跌倒就会从哪里爬起来,让我们一起努力吧

设计模式GOF23之单例模式实现

相关文章:

你感兴趣的文章:

标签云: