是什么?
单例,"单"就是一个,"例"就是实例,”单例“就是说”一个类只有一个实例,且自行实例化向整个系统提供“。
为什么?
为什么要使用单例模式呢?换句话说,为什么一定要确保一个类只有一个实例呢?通过下面这个例子来看:
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的,所以外部类其实也无法调用它的构造方法去实例化。
版权声明:本文为博主原创文章,未经博主允许不得转载。