黑马程序员——单例设计模式

------ Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

单例模式

      单例模式,顾名思义,当需要保证某个类只能有一个实例时,就要使用单例。

如何保证类在内存中只有一个对象:

     1.控制类的创建,不让其他类来创建本类的对象。即自定义私有构造函数。

    2.在本类中定义一个本类的对象。

    3.提供公共的访问方式,将自己创建的对象提供出去。

实现方式:

class Singleton{
	//1.私有构造器
	private Singleton(){}
	//2.创建本类对象
	private static Singleton s = new Singleton();
	//3.对外提供公共访问方法
	public static Singleton getInstance(){
		return s;
	}
}

      该实现方式称为“饿汉式”,代码简洁,是开发中最常用的单例实现方式。

class Singleton{
	//1.私有构造器
	private Singleton(){}
	//2.声明一个本类的引用,并初始化为null
	private static Singleton s = null;
	//3.对外提供公共访问方式
	public static Singleton getInstance(){
		//利用双重判断提高效率
		if(s==null){
			//同步代码块的使用解决了多线程访问的安全问题
			synchronized(Singleton.class){
				if(s==null)
				   s = new Singleton();
			}
		}
		return s;
	}
}

    该实现方式称为“懒汉式”,是单例的另一种实现方式,开发中很少用。

   两种实现方式的区别

       饿汉式是以空间换时间,即首先创建对象,相对于懒汉时来说比较浪费空间,但代码实现简单,节省了时间;

       懒汉式是以时间换空间,对象延迟创建,但代码实现繁琐,且多线程访问时容易发生安全隐患。

       所以,在实际使用过程中,多数情况使用饿汉式。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值