设计模式——单例模式

一、定义: 顾名思义,单例单例,也就是只允许有一个实例对象。

那怎么去控制只允许有一个实例对象呢?答案就是将其构造函数私有化(private),使外界不能去new这个类的对象。外界想要获取该类的对象,只能通过该类的静态方法去获取,从而达到控制只有一个实例的目的。

 

二、单例模式的实现

实现单例的方式有两种:

1.懒汉模式

2.饿汉模式

那什么叫懒汉模式、什么叫饿汉模式呢?顾名思义,懒汉就是我要的时候你才去做(太懒了),饿汉就是一上来就抢下“馒头”(即 一上来就把对象给new 好)。

下面我们来看看代码:

/*
 * 懒汉模式 非线程安全
 */
class SingleLZ {
	private static SingleLZ singleLZ;

	private SingleLZ() {
	}

	public static SingleLZ getIntenceLz() {
		if (singleLZ == null) {
			return new SingleLZ();
		} else {
			return singleLZ;
		}
	}
}
// 懒汉式 线程安全
class SingleLZY {
	private static SingleLZY singleLZY;

	private SingleLZY() {
	}

	public static SingleLZY getIntenceLz() {
		if (singleLZY == null) {
			synchronized (SingleLZY.class) {
				if (singleLZY == null) {
					singleLZY = new SingleLZY();
				}
				return singleLZY;
			}
		}
		return singleLZY;
	}
}

/*
 * 饿汉模式 线程安全 
 */
class SingleHanger {
	private static SingleHanger singleHanger = new SingleHanger();

	private SingleHanger() {
	}

	public static SingleHanger getIntenceHanger() {
		return singleHanger;
	}
}

 

 由上我们可以看出懒汉式的优点是没有的话才去new,比较节省内存,但是缺点是必须得给创建对象的地方加锁,才能保证在多线程的情况下才是安全的,所以在效率上就没有饿汉那么高,因为饿汉式是类加载之后就进行了对象的创建,且天生线程安全。只是一来就new,相对懒汉式来说,就比较占用内存。各有优缺点。但在开发中一般使用饿汉式,因为效率高且天生线程安全嘛。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值