单例设计模式

单例设计模式

1.什么是单例设计模式

              单例模式就是用来创建独一无二的,只有一个实例的对象的模式。

2.为什么使用单例模式

 有些对象我们只需要一个,如果制造出多个实例,就会产生许多问题。比如程序行为异常,资源使用过度。

3.单例模式实现

分为饿汉模式和懒汉模式

饿汉模式:

package com.tom.singleton;
/*
 * 单例设计模式学习:
 *  1、设计模式:一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。
 *  2、目的:可重用代码,让代码更容易被他人理解、保证代码可靠性。
 *  3、单例模式:保证整个应用中某个实例有且只有一个。
 *  4、举例:配置文件、工具类、线程池、缓存、日志对象等
 *  5、饿汉模式,懒汉模式		
 */
public class SingletonDemo {
	//构造方法私有化,外界无法直接创建对象
	private SingletonDemo(){
		
	}
	//创建类的唯一实例,private static ,static修饰为类所有,类加载就创立,无论是否需要。
	private static SingletonDemo instance = new SingletonDemo();
	//提供一个用于获取实例的方法,此方法为实例(对象)方法,不是类方法,添加static
	public static SingletonDemo getInstance(){
		return instance;
	}
}

懒汉模式:

package com.tom.singleton;
/*
 * 懒汉模式
 */
public class Singleton {
	//构造私有
	private Singleton(){
		
	}
	//声明类的唯一实例,试用private,static修饰
	private static Singleton instance;
	//提供一个用于获取实例的方法,使用public static修饰
	public static Singleton getInstance(){
		if(instance == null){
			instance = new Singleton();
		}
		return instance;
	}
}

区别:饿汉模式的特点是加载比较慢,但运行时获取对象的速度比较快,线程安全。
           懒汉模式的特点是加载快,获取慢,线程不安全。
如何解决饿汉可能造成资源的浪费和懒汉的线程不安全问题?

       可以利用同步(synchronized)方法,但是同步解决了线程安全问题,随之而来只有第一次需要同步,当已经有创建的实例时,就不需要同步了,所以我们采用双重检查加锁的方法来解决同步的弊端:

      

	private volatile static Singleton instance;
	//提供一个用于获取实例的方法,使用public static修饰
	public static Singleton getInstance(){
		if(instance == null){
			synchronized (Singleton.class) {
				if(instance == null){
					instance = new Singleton();
				}
			}
			
		}		
		return instance;
	}
这样就能保证只执行一次同步了。


  


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值