单例模式

单例模式

1 饿汉式

//天然线程安全,因为修饰有static关键字,在装载类的时候就已经初始化,肯定不会出现并发访问的问题
class Singleton01{
	private static Singleton01  s = new Singleton01();
	
	private Singleton01(){}
	//只将这个方法对外开放,这样外部获取的永远都是s这一个实例
	public static Singleton01 getIntance(){
	retrun s;
}

//缺点:如果只是加载而不需要调用,那生成的这个实例就是资源浪费

2 懒汉式

//
class Singleton02{
	private static Singleton02 s;
	private Singleton01(){}
	
	public static synchronized Singleton02 getIntance(){
		if(s == null){
		return new Singleton02();
	}else{
	return s;
	}	
}

//延迟加载,用的时候加载,不会造成资源浪费
//缺点:在调用的时候由于并发访问,可能会有排队等候的文通,资源利用率高,但并发效率低

3 静态内部类式

合并了上两者的问题

class Singleton03{
	private Singleton03(){}
	
	private static Singleton03Class{
		private static final Singleton03 s = new Singleton03();
	}
	public static synchronized Singleton02 getIntance(){
	return Singleton03Class.s;
	}	
}

//外部没有static属性,所以不会有立即加载
内部类有static final 修饰,表示不可更改

你可能感兴趣的:(设计模式)