GOF23设计模式——单例(2)

设计模式单例实现(2)

  • 双重检测锁实现单例(不考虑)
  • 静态内部类实现单例
  • 枚举实现单例(没有延时加载)

双重检测锁实现单例(不考虑)

package org.test.singleton;

/**
 * 
    * @ClassName: SingletonDemo3  
    * @Description: 双重检测锁实现单例(不考虑) 
    * @author Administrator  
    * @date 2017年3月30日  
    *
 */
public class SingletonDemo3 {
    private static SingletonDemo3 instance = null;

    private SingletonDemo3() {
    };

    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 org.test.singleton;
/**
 * 
 * @ClassName: SingletonDemo4
 * @Description: 静态内部类实现单例
 *              1.外部类没有static属性,则不会像饿汉式在类加载时立即初始化实例
 *              2.只有调用getInstance()才会加载静态内部类,加载类是线程安全的。instance
 *                是static final 类型,保证内存中只会有这样一个实例存在,而且只能被赋值一次,
 *               保证了线程安全。
 * @author Administrator
 * @date 2017年3月30日
 *
 */
public class SingletonDemo4 {

    private static class SingletonClassInstance {
        private static final SingletonDemo4 instance = new SingletonDemo4();
    }

    private SingletonDemo4() {

    }

    public static SingletonDemo4 getInstance() {
        return SingletonClassInstance.instance;
    }
}

枚举实现单例(没有延时加载)

package org.test.singleton;
/**
 * 
    * @ClassName: SingletonDemo5  
    * @Description: 枚举实现单例(没有延时加载) 
    * @author Administrator  
    * @date 2017年3月30日  
    *
 */
public enum SingletonDemo5 {
    //这个枚举元素,自身就是单例对象
    INSTANCE;

    //添加自己需要的操作
    public void singletonOperation(){

    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值