JAVA设计模式之:单例模式

经常遇到单例模式的题目,能死记硬背下来,却一直不明白其原因。最近好好接触了下,说说自己的理解。

单例模式主要私有化其构造方法,这样每当我们要实例化一个类的时候,我们就不能通过new的方式来实例化这个类。而这个时候,我们就可以通过调用类中我们自己写的一个实例化类来调用其方法。可是为什么要这么做呢?因为每当我们实例化一个类的时候,堆内存会为其分配一个空间,如果其引用已知存在的话,那么这个为其分配的空间会已知存在。而我们不断得调用一个类的同时,通过new方法会无数次得让同一个类重复需要内存对其分配空间,这样导致的结果是浪费了大量内存。所以我们可以做的是通过调用类中的实例化方法,只在第一次的时候实例化一次,以后每次要用的时候都只是用第一次实例化的那个类。


首先上一段最基础的单例模式的代码

<pre name="code" class="html">
<pre name="code" class="html">public class Singleton {
	
	private static Singleton singleton = null;
	
	private Singleton(){
		
	}
	
	public static Singleton getSingleton(){
		if(singleton == null){
			singleton = new Singleton();
		}
		return singleton;
	}
	
}


 

 

这是第一种,自认为效率最低而且不能再多线程中同步的单例模式。


<pre name="code" class="html">public class Singleton {
	
	private static Singleton singleton = null;
	
	private Singleton(){
		
	}
	
	public synchornized static Singleton getSingleton(){
		if(singleton == null){
			singleton = new Singleton();
		}
		return singleton;
	}
	
}


 第二种,加上了syn同步代码块,但是效率还是很低 


  1. public class Singleton {  
  2.     private static Singleton instance = new Singleton();  
  3.     private Singleton (){}  
  4.     public static Singleton getInstance() {  
  5.     return instance;  
  6.     }  
  7. }  
第三种,通过在类装载时就实例化,解决线程同步的问题


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值