单例设计模式(注释详讲,并解决懒汉式线程安全问题)

单例设计模式

1.什么是设计模式

针对特定的问题提供的固定的最优的解决方案。
在面向对象的编程语言中有23种设计模式:
其中之一:单例设计模式

2.什么是单例设计模式

核心:确保对象唯一性。
即:拿到某个类的对象,始终是同一个对象,多个对象引用的引用地址是相同的(栈中的多个对象引用指向堆中的同一个实体对象)

基本类型变量恒等比较比较的是两个变量的值是否相等,引用类型变量恒等比较比较的是两个引用变量引用的地址是否相等。
1】 饿汉式(注释详细解释了为什么这样做)
之所以叫饿汉式,是因为对象在类加载的时候就创建了。

//饿汉式
public class Single 
{   
   //为了防止在外类中new对象,所以构造器是私有的
	private Single(){
	
	}
    
	/*static 是核心,被static修饰的s对象,是Single类一加载就在本类中
	创建本类对象成员变量。只存在一个。
	对象成员变量s被static修饰后属于类,可以通过类名.变量的方式使用
	但是为了安全性,不让外类直接访问,所以把s对象也私有化。
	*/
	private static Single s = new Single();
    /*既然我们把s对象私有化了,那么我们就需要通过一个公共的访问方式来得到
    这个对象,所以创建了一个公共的,返回值类型为Single的getSingle()方法,
    通过返回s来访问。
    */
	public static Single getSingle(){
	  return s;
	}
}

2】 懒汉式
在调用方法时创建对象。

//懒汉式
public class Single2 
{
	//1)私有化构造器
	private Single2(){
	
	}

    //2)在本类中先声明私有的静态的本类对象成员变量
	private static Single2 s = null;

	public static Single2 getSingle(){
	   if(s == null){
	     s = new Single2();
	   }
	   return s;
	} 
}

但是要注意的是:懒汉式在多线程中是不安全的,在创建对象时可能创建多个对象,以至于造成访问不是同一个对象。
解决方法:对实例化方法加锁 public static synchronized Single2 getSingle()

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值