JAVA设计模式——单例模式学习心得

   单例:保证一个类只有一个实例,并提供一个访问的全局访问点。保证定义的类只能new出一个对象(实例),满足于一些只允许实例化一次的场景。一个简单的单例模式需要:1.对无参构造私有化;2.提供公共方法,在当前类没有实例时创建实例,有实例则返回实例。单例模式分为:懒汉模式(饱汉模式)和饿汉模式。 饱汉式的特点:用的时候再new,是线程不安全的。public...
摘要由CSDN通过智能技术生成

 

 

 

单例:保证一个类只有一个实例,并提供一个访问的全局访问点。保证定义的类只能new出一个对象(实例),满足于一些只允许实例化一次的场景。

一个简单的单例模式需要:

1.对无参构造私有化;

2.提供公共方法,在当前类没有实例时创建实例,有实例则返回实例。

单例模式分为:懒汉模式(饱汉模式)和饿汉模式。

 

饱汉式的特点:用的时候再new,是线程不安全的。

public class Single {
	//1.私有化无参构造
	private Single() {};
	//2.创建一个私有静态的Single对象
	private static Single instance ;
	//3.提供公共访问的get方法
	public static Single getInstance(){
		if(instance == null){
			instance = new Single();
		}
		return instance;
	}
}

饿汉式的特点: final创建实例,丧失灵活性,线程安全。

class Single2 {
	//1.无参构造私有化
	private Single2(){}
	//2.final创建一个私有对象
	private static final Single2 instance = new Single2();
	//提供公共访问方法
	public static Single2 getInstance(){
		return instance;
	}
}

---------------2019.1.2补充--------------------------------


补充的内容如下知识结构图所示:

 

 

饿汉模式除了具有上面的静态final修饰定义一个指定内存的对向外,也可以使用静态代码块初始化:

public class StaticCodeBlock {
	private static StaticCodeBlock instance;	
	static {
		instance = new StaticCodeBlock();
	}	
	private StaticCodeBlock() {}	
	public static StaticCodeBlock getInstance() {
		return instance;
	}
}

以上常用单例模式依然存在问题:使用静态final实例化对象或者使用静态代码块不能解决在反序列化、反射、克隆时重新生成对象的问题。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值