一、单例模式简介
单例模式,是一种软件设计中常用的一种设计模式,主要是用来控制系统中的某一个具体类只有有一个实例存在。
有时候我们需要确保整个系统中的某个类只有一个实例存在,这样便于我们协调系统中的行为。例如,我们要在某个系统中使用发送短信的服务,那么、
我们希望单一的短信发送类实例,而不是由多个对象来共同实现短信的发送服务,这时候我们可以通过单例模式来实现。
二、单例模式实现方式
1、内部实现-内部空间就是类的内部初始化单例对象的实例,如果是第一次访问则创建,反之则不创建,直接拿来用就好了,目前使用的单例模式都是通过内部实现的。
/**
* 单例模式内部实现方式
* @author 张天柱
* @version 1.1
**/
public class Instance1 {
/*声明一个内部私有化对象*/
private static Instance1 instance1 = null;
/*私有构造方法,防止被实例化*/
private Instance1(){
}
/*静态工程方法,创建实例*/
public static Instance1 getInstance1(){
if(instance1 == null){
instance1 = new Instance1();
}
return instance1;
}
/*如果该对象被序列化,该方法可以保证对象在序列化前后保持一致*/
public Object readResolve(){
return instance1;
}
}
这个类基本上可以满足要求,但是在毫无线程安全的情况下,把它放入到多线程的环境中,肯定会出错,如何解决,我们首先会想到在getInstance1()方法加入关键字synchronized,但是这种方法在每次获取对象时,都会讲该方法锁住,在性能上会有所降低。所以我们可以判断如果对象为空,我们再将该方法锁定,这样会在很大程度上提高性能..
/*静态工程方法,创建实例*/
public static Instance1 getInstance1(){
if(instance1 == null){
synchronized (instance1) {
instance1 = new Instance1();
}
}
return instance1;
}
通过对单例模式的学习告诉我们:
1、单例模式虽然理解起来很简单,但是在实施起来还是有一定的难度的
2、synchronized关键字一定要慎用
3、单例模式可以用到某些具体的场合,如全局发送消息等场合。