Head First Design Pattern 读书笔记(4) 单例模式

蓝咒 提交于 2019-11-27 10:28:36

Head First Design Pattern 读书笔记(4) Singleton Pattern 单例模式

###Silngleton Pattern 类图 单例模式非常简单,基本没有什么类之间的关系,就不画图了,保证某个类生成的实例只有一个即可。

###定义

  1. 单例模式:只允许一个类实例化一个对象,并提供一个可以全局访问这个实例的方法(接口)。

###关于单例模式

  1. 最简单的单例模式实现方法是:
/*
*“懒汉式”写法,即等要用了再去实例化实例对象,而不是应用一启动就实例化好放在容器中。
*/
public class Singleton {
	private Singleton();
	private static Singleton instance;
	public static getSingleton(){
		if(instance==null){
			instance = new Sinleton();
		}
		return instance;
	}
}
  1. 1中实现的singleton在多线程中可能会有多个线程同时实例化,导致实例对象不止一个的问题,解决方案是使用同步锁,或者使用“饿汉式”的写法。
//双重检查锁的写法,因为使用了volatile关键字,需要jdk1.4以上
public class Singleton {
	private Singleton();
	private static volatile Singleton instance;
	public static getSingleton(){
		if(instance==null){
			synchronized (Singleton.class){
				if(instance==null){
					instance = new Sinleton();
				}
			}
		}
		return instance;
	}
}

/**
* “饿汉式”的写法,因为没用到同步锁,所以后期效率最高。
**/
public class Singleton {
	private Singleton();
	private static Singleton instance = new Singleton();
	public static getSingleton(){
		return instance;
	}
}

  其实所谓“懒汉式”与“饿汉式”的写法,只是区别在初始化的时机而已。“饿汉式”写法由jvm保证一应用启动时只实例化一个对象,由于多了一步实例化操作,应用启动会稍微慢点。而“懒汉式”由于是在应用启动后实例对象,所以要考虑多线程并发的情况。对于不是很大的应用,个人偏向于“饿汉式”,毕竟启动的时候多花点时间启动,换来后期运行的安全与效率也是值得的。谁没事天天重启生产上的程序啊(╯‵□′)╯︵┻━┻ 。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!