Java设计模式: 单例模式

单例模式: 内存中只存在一份该类的实例对象, 分为懒汉式和饿汉式单例模式。

开发中:建议使用饿汉式单例模式 (例如JDK中的Runtime类),因为饿汉式不存在线程安全问题。

面试中:建议谈谈懒汉式单例模式,因为其中会涉及延迟加载的思想和线程安全的问题,技术含量高点。

package ms.gaoke.pattern;

/* 1: 饿汉式 单例模式
 *		1. 构造方法私有化, 阻止其他类创建实例对象
 *		2. 对外提供通过类名调用的实例方法(getInstance方法), 需用static关键字修饰
 *		3. 创建static成员变量,并使用private修饰,避免外部类通过类名来修改成员变量
 *
 */
public class SingletonPerson1 {	
	private static SingletonPerson1 person1 = new SingletonPerson1(); 
	private SingletonPerson1() {}
	
	public static SingletonPerson1 getInstance() {
		return person1;
	}
	
}
package ms.gaoke.pattern;

/* 2: 懒汉式 单例模式
 *		1. 延迟加载的思想
 *		2. 需要处理线程安全问题	
 *
 *PS:线程安全需要考虑以下三点:
 *		1.是否多线程环境下
 *		2.是否存在共享数据
 *		3.是否是原子性的操作共享数据
 *
 */
public class SingletonPerson2 {
	private static SingletonPerson2 person2 = null; 
	private SingletonPerson2() {}
	
	public synchronized static SingletonPerson2 getInstance() {
		if(person2 == null) {
			person2 = new SingletonPerson2();			
		}		
		return person2;
	}
}

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值