设计模式中单例模式的介绍
单例对象(Singleton)是一种常用的设计模式。在Java应用中,单例对象能保证在一个JVM中,该对象只有一个实例存在。这样的模式有几个好处:
1、某些类创建比较频繁,对于一些大型的对象,这是一笔很大的系统开销。
2、省去了new操作符,降低了系统内存的使用频率,减轻GC压力。
3、有些类如交易所的核心交易引擎,控制着交易流程,如果该类可以创建多个的话,系统完全乱了。(比如一个军队出现了多个司令员同时指挥,肯定会乱成一团),所以只有使用单例模式,才能保证核心交易服务器独立控制整个流程。
首先我们来写一个简单的单例类:
public class SingleClass{
//私有静态化实例,防止被引用。
private static SingleClass singleClass = null;
//私有化构造器,防止被实例化
private SingleClass(){
}
//静态工程方法,创建实例
public static SingleClass getInstance(){
if(singleClass == null){
return new SingleClass();
}else{
return singleClass;
}
}
}
这个类可以满足基本要求,但是,像这样毫无线程安全保护的类,如果我们把它放入多线程的环境下,肯定就会出现问题了,如何解决?我们首先会想到对getInstance方法加synchronized关键字,如下:
public static synchronized SingleClass getInstance(){
if(singleClass == null){
return new SingleClass();
}else{
return singleClass;
}
}
当然上面所讲可以称之为懒汉式,现在再给大家说一下饿汉式的区别;
public class SingleClass{
//私有静态化实例,防止被引用。
private static SingleClass singleClass = new SingleClass();
//私有化构造器,防止被实例化
private SingleClass(){
}
//静态工程方法,创建实例
public static SingleClass getInstance(){
if(singleClass == null){
return new SingleClass();
}else{
return singleClass;
}
}
}
饿汉式在类加载的时候就已经实例化,而懒汉式属于用到的时候再去实例化;