A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李江 中级黑马   /  2013-10-12 08:59  /  1460 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

设计模式的创建模式中前面说了工厂模式,这里我们继续来讨论设计模式中另一个创建模式—单例模式。
单例模式(Singleton)是指确保一个类有且仅有一个实例,而且自行实例化并向整个系统提供这个实例。这个类我们也称它为单例类。单例模式的使用在现实世界里很多,比如我们常见的打印机打印的作业队列,一个没打印完,那么只有在队列等待;windows回收站,windows视窗里回收站有且只有一个实例。
单例模式的目的就是有且只提供一个实例,所以它有一下几个特点:
1、单例类只能有一个实例;
2、单例类必须自己创建自己惟一的实例;
3、单例类必须给所有其他对象提供这一实例。
单例模式的一般结构如下:


上图可以看出,单例类自己提供一个实例给自己。
由于java语言的特点在单例的实现上有不同的做法,主要体现在单例类如何实例化自己上。基于上面三个特点我们可以有两种创建单例类实例的方法,第一个是提前创建好,用的时候直接使用;第二种是等到使用的时候再创建实例,业界称第一种为饿汉式,后者成为懒汉式。


饿汉式单例设计模式

  1. packagecom.pattern.singleton;
  2. /**
  3. *
  4. *【描述】:饿汉式单例模式
  5. *【作者】:alaric
  6. *【时间】:Jul 8, 2012
  7. *【文件】:com.pattern.singleton.HungrySingleton.java
  8. *
  9. */
  10. publicclass HungrySingleton {

  11. //创建实例
  12. private static final HungrySingleton singleton =new HungrySingleton();

  13. //私有构造子
  14. private HungrySingleton(){}

  15. //静态工厂方法
  16. public static HungrySingleton getInstance(){
  17. return singleton;
  18. }

  19. }
复制代码
懒汉式单例设计模式
  1. packagecom.pattern.singleton;
  2. /**
  3. *
  4. *【描述】:懒汉式单例模式
  5. *【作者】:alaric
  6. *【时间】:Jul 8, 2012
  7. *【文件】:com.pattern.singleton.LazySingleton.java
  8. *
  9. */
  10. public class LazySingleton {

  11. //创建实例
  12. private static  LazySingleton singleton =null;

  13. //私有构造子
  14. private LazySingleton(){}

  15. //静态工厂方法
  16. synchronized public LazySingleton getInstance(){
  17. //如果为空就new一个实例
  18. if(singleton==null){
  19.             singleton =new LazySingleton();
  20. }
  21. return singleton;
  22. }

  23. }
复制代码
通过上面代码,可以看出他们之间的区别,相对而言单例设计模式比较简单,我们只要记住它的特点就可以简单掌握了

1 个回复

倒序浏览
静态工厂方法 的定义忘了写 static
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马