04单例模式

单例模式

<设计模式其实很简单>笔记


①定义:

保证一个类仅有一个实例,并提供一个访问它的全局访问点。


②代码:
public class Singleton {
	rivate static Singleton singInstance;
	private Singleton() {..}      //私有话构造函数,对象只由类本身实例化

	public static Singleton GetInstance(){
		if(singInstance == null){
			singInstance = new Singleton();
		} 
		return singInstance;
	}
}
/*如果单例模式在多线程中使用,那么要防止多个线程在接近的时间内同时进入到判断对象是否存在的代码, if(singInstance == null)  ,不然会创建出多个对象,不是同一个。 可使用锁。*/
将代码修改如下:
public class Singleton {
	static Lock lock = new ReentrantLock();      //锁
	private static Singleton singInstance;
	private Singleton() {..}      //私有话构造函数,对象只由类本身实例化

	public static Singleton GetInstance(){
		lock.lock();
		if(singInstance == null){
			singInstance = new Singleton();
		} 
		lock.unlock();
		return singInstance;
	}
}
可再做优化,不用在判断的时候都加锁
if(singInstance == null){
	lock.lock();
	if(singInstance == null){
		singInstance = new Singleton();
	} 
	lock.unlock();
}




③另外的东西:
其实通过全局变量也可以实现单例模式的效果,不过无法阻止一个类被多次实例化
//Jvm在第一次加载类时会先将所有静态变量初始化。
public class Instance{
private static Instance instance = new Instance();  //静态单例模式
public static Instance getInstance(){
return instance;
}


public static void main(String[] args){
Instance instanceA = Instance.getInstance();
Instance instanceB = Instance.getInstance();
System.out.println(instanceA==instanceB)
}
④优点:
对唯一的实例做出访问控制。
允许改变实例的数目(可通过计数)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值