设计模式之单例模式

一.核心作用:
保证一个类只有一个实例,并且提供一个访问实例的全局访问点
二.常见的使用场景:
windows的任务管理器
windows的回收站
在seivlet编程中,每个Servlet也是单例的
在spring中,每个Bean默认就是单例的
。。。。。。
三.优点:
由于单例模式只生成一个实例,减少了系统性能开销。
单例模式可以在系统设置全局访问点,优化共享资源的访问。
单例模式可以说只要是一个合格的开发都会写,但是如果深究,小小的单例 模式牵扯到很多东西。
四.常见的五种单例模式实现方式:
饿汉式(线程安全,调用效率高,不能延时加载)
懒汉式(线程安全,调用效率不高,可以延时加载<调用的时候才加载类>)
DCL懒汉式(由于JVM底层模型的原因,偶尔效率高,可以延时加载)
饿汉式改进:静态内部类式(线程安全,调用效率高,可以延时加载)
枚举单例(线程安全,调用效率高,不能延时加载)

4.1饿汉式

//饿汉式单例
public class SingletonDemo01{
	//1.私有化构造器
		private SingletonDemo01() {		
		}
	//2.类初始化的时候,立即加载该对象(饿汉)
		private static SingletonDemo01 inSingletonDemo01= new SingletonDemo01();
	//3.提供获取该对象的方法
		public static SingletonDemo01 getInSingletonDemo01() {
			return inSingletonDemo01;
		}	
	public static void main(String[] args) {		
		SingletonDemo01 inDemo01=SingletonDemo01.getInSingletonDemo01();
		SingletonDemo01 inDemo012= SingletonDemo01.getInSingletonDemo01();
	    System.out.println(inDemo01==inDemo012);
	}

}

运行结果为:在这里插入图片描述在这里插入图片描述
饿汉式存在的问题:如果在类中加入开辟内存空间的方法时,很浪费内存。
在这里插入图片描述4.2懒汉式:


//懒汉式
public class SingletonDemo03 {
//1.私有化构造器
	private SingletonDemo03() {		
	}
//2.类初始化的时候,不立即加载对象
	private static SingletonDemo03 inDemo03;
//3.提供获取该对象的方法,有synchronized效率会低
	public static synchronized SingletonDemo03 getinDemo03() {
		if(inDemo03==null) {
			inDemo03=new SingletonDemo03();
		}
		return inDemo03;
			}
	public static void main(String[] args) {		
    SingletonDemo03 inSingletonDemo03 =SingletonDemo03.getinDemo03();
    SingletonDemo03 inSingletonDemo032=SingletonDemo03.getinDemo03();
    System.out.println(inSingletonDemo03==inSingletonDemo032);	 
	}
}

运行结果:
在这里插入图片描述 懒汉式存在的问题保证了现在安全有符合懒加载,但是效率低下。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值