单例模式
2015-06-20 12:42
169 查看
是什么?
单例,"单"就是一个,"例"就是实例,”单例“就是说”一个类只有一个实例,且自行实例化向整个系统提供“。
为什么?
为什么要使用单例模式呢?换句话说,为什么一定要确保一个类只有一个实例呢?通过下面这个例子来看:
QQ,当你想和某个朋友聊天时,在好友列表中找到该好友,鼠标双击,就会打开对话窗口(从程序角度说:捕捉到你双击事件时会实例化出一个窗口对象)。当窗口打开后,你再去双击该好友时,观察是否还会再打开一个新的窗口,答案是否定的。在这种情况下,只能允许实例化一个同一窗口的对象。【QQ实际上可能不是这样实现的,我只是想举这么一个例子】同样机理的还有打印机,同一时刻只能执行一个打印任务,等等。
怎么样?
这么样实现呢?其实单例实现有很多方法,下面只给出比较高效的一种:
单例,"单"就是一个,"例"就是实例,”单例“就是说”一个类只有一个实例,且自行实例化向整个系统提供“。
为什么?
为什么要使用单例模式呢?换句话说,为什么一定要确保一个类只有一个实例呢?通过下面这个例子来看:
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的,所以外部类其实也无法调用它的构造方法去实例化。
相关文章推荐
- 用refine函数2次加密后的单元标号阵elem,可以看出总体节点编号的分布情况
- 再次简介grep命令和wc命令(某公司招聘笔试试题)
- 将代码段和数据段分离在cache和uncache空间
- JAVASE学习笔记:第十三章 多线程和网络编程
- C#文件重命名的处理方法 (转载)
- assign()的使用以及在构造对象时不能使用
- JAVASE学习笔记:第十二章 集合
- Java编程思想学习笔记——初始化与清理
- 【Linux探索之旅】第一部分第二课:下载Linux,免费的噢
- ubuntu系统美化
- DataUml Design 课程6-DataUML Design 1.1版本号正式宣布(支持PD数据模型)
- 利用kickstart实现自动化安装
- cocos2dx单场景和多场景的生命周期
- 算法学习之链表反转
- 强制链接静态库所有符号(包括未被使用的)
- C#网络编程(接收文件) - Part.5
- CSAPP(前言)
- java的事件处理机制基础
- fragment中嵌套viewpager,vierpager中有多个fragment,不显示 .
- 关于栈空间和堆空间的问题