单例设计模式

本文详细介绍了单例设计模式的概念及其实现方式,包括饿汉式和懒汉式的具体实现,并探讨了它们之间的区别以及如何避免懒汉式实现中的线程安全隐患。

所谓的设计模式指的就是:遇到同一种情况的,采取的一种成熟的处理的方法--->设计模式。

本次列举的是单例模式,那么什么是单例模式哪?“单例”也就是单实例,所以要解决的问题就是在内部控制对象的产生,从而保证对象的唯一性,

其中枚举就是一个单例:

/**
 * 最简单的单例模式代码
 * @author D H B
 *
 */
public enum SingleEnum {
	MONDAY;
}

1.单例模式:懒汉式和饿汉式

 a:饿汉式

    它指的是不管你有没有使用这个对象,这个对象都会被创建,都会把这个对象加载进内存。

    代码如下:

 

/**
 * 单例设计模式中的懒汉式
 * 
 * @author dhb
 *
 */
public class Hungry {
	// 方式一:
	private static final Hungry instance = new Hungry();

	// 构造方法私有化,保证对象的唯一性:
	private Hungry() {
	}

	// 对外提供公共的获取对象的方法:
	public static Hungry getInstance() {
		return instance;
	}

}

  

/**
 * 方式二:
 * 
 * @author dhb
 *
 */
public class Singleton {
    //创建实例的对象:
    public static final Singleton instance = new Singleton();
    
    //构造器私有
    private Singleton() {
    }

}

b:懒汉式

  就是说需要的时候,就创建对象,不需要的时候,就不创建。

/**
 * 懒汉式:
 * 就是有需要 的时候,再去创建对象,不需要的时候,就不在创建
 * @author dhb
 *
 */
public class LazySingleton {
    
    private static final LazySingleton instance = null;
    //构造器私有化
    private LazySingleton() {}
    
    /**
     * 对外提供公共的获取对象的方法
     * 说明:此时存在线程的<安全隐患:>
     * @return>
     */
    public static LazySingleton getInstance() {
        if(null == instance) {
            return new LazySingleton();
        }
        return null;
    }

说明:上述的懒汉式存在安全隐患,所以解决如下:

/**
 * 懒汉式:增强安全 、提升性能
 */
public class LazySingletonPlus {
    private static LazySingletonPlus INSTANCE = null;
    // 构造器私有化
    private LazySingletonPlus() {
    }
    // 提供公共的获取对象的方法。
    public static LazySingletonPlus getInstance() {
        if (null == INSTANCE) {//提升效率:如果内存中已经存在这个对象了,那么就不在进"锁 "中判断了。
            synchronized (LazySingletonPlus.class) {//解决线程安全隐患问题:(在静态的方法中不能使用this关键字)
                if(null == INSTANCE) {
                    INSTANCE = new LazySingletonPlus();
                    return INSTANCE;
                }
            }
        }
        return null;
    }
}

 

转载于:https://www.cnblogs.com/donghaibin/p/9141524.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值