您的位置:首页 > 其它

单例模式

2015-06-20 12:42 169 查看
是什么?

单例,"单"就是一个,"例"就是实例,”单例“就是说”一个类只有一个实例,且自行实例化向整个系统提供“。

为什么?

为什么要使用单例模式呢?换句话说,为什么一定要确保一个类只有一个实例呢?通过下面这个例子来看:

QQ,当你想和某个朋友聊天时,在好友列表中找到该好友,鼠标双击,就会打开对话窗口(从程序角度说:捕捉到你双击事件时会实例化出一个窗口对象)。当窗口打开后,你再去双击该好友时,观察是否还会再打开一个新的窗口,答案是否定的。在这种情况下,只能允许实例化一个同一窗口的对象。【QQ实际上可能不是这样实现的,我只是想举这么一个例子】同样机理的还有打印机,同一时刻只能执行一个打印任务,等等。

怎么样?

这么样实现呢?其实单例实现有很多方法,下面只给出比较高效的一种:

package test;
/**
* 单例模式.
* @author nagsh
*
*/
public class Singleton {
//将该类的实例(即对象)声明为静态的
public static Singleton singleton = null;
//空构造方法--私有
private Singleton() {
}
//对象生成器
public void getInstance(){
//如果对象为null,进行实例化
if(singleton == null){
//锁机制,当有多个线程同时访问时,必须等前一个线程释放锁后才可以执行
synchronized(Singleton.class){
//需再判断一次--如果上一个线程已经实例化了,就没必要再实例化了
if(singleton==null){
singleton=new Singleton();
}
}
}
}
}
当外部类需要该类对象的时候不是实例化,而是通过调用getInstance()方法获取实例,而原本默认public的构造方法由于被覆盖成了private的,所以外部类其实也无法调用它的构造方法去实例化。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: