大话Java单例设计模式

单例模式无疑是23种设计模式中最简单的一个,在实际开发项目开发中也比较常用。如果希望在系统中某个类的对象只能存在一个,单例模式是最好的解决方案。


笔者总结单例模式的三要素:
①、私有的静态本类对象(防止外部类调用此单例对象)

②、私有的构造方法(防止通过new来创建单例对象)

③、返回该类对象的共有的静态工厂方法(可以通过“类名.getInstance()”方法得到单例对象)


其中其中单例模式又分为懒汉、饿汉两种模式

class Singletion {
	// ①、私有的静态本类对象
	private static Singletion singletion;

	// ②、私有的构造方法
	private Singletion() {
	}

	// ③、返回该类对象的共有的静态工厂方法
	public static Singletion getInstance() {
		if (singletion == null) {
			singletion = new Singletion();
		}
		return singletion;
	}
}



饿汉模式是指在调用静态工厂方法时创建对象

class Singletion {
	// ①、私有的静态本类对象
	private static Singletion singletion = new Singletion();

	// ②、私有的构造方法
	private Singletion() {
	}

	// ③、返回该类对象的共有的静态工厂方法
	public static Singletion getInstance() {
		return singletion;
	}
}




懒汉与饿汉模式各有其优势:
懒汉模式:以时间换空间,当调用工厂方法时才为成员分配内存,但当执行时,会多花很长时间。

饿汉模式:以空间换时间,初始化类时便为成员分配内存,这样可以节省程序运行时间,但会一直占用内存。


笔者认为懒饿两汉最大的不同就是:懒汉线程不安全,饿汉是线程安全的。当多个线程同时访问懒汉的getInstance方法时,他们同时进入if语句中,就可能出现多次为私有成员初始化赋值的情况,这样就出现了线程安全问题,我们可以用synchronized来解决此问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值