黑马程序员技术交流社区

标题: 单例设计 [打印本页]

作者: yanyoucheng520    时间: 2014-7-18 23:56
标题: 单例设计
单例设计主要有些什么用处
作者: 张盼    时间: 2014-7-19 00:02
用于在内存中只有一个对象,例如7K面试题中的号码管理器就是
作者: 苗润    时间: 2014-7-19 00:33
解决的问题:保证一个类在内存中的对象唯一性。
比如:多程序读取一个配置文件时,建议配置文件封装成对象。会方便操作其中数据,又要保证多个程序读到的是同一个配置文件对象,就需要该配置文件对象在内存中是唯一的。
例如总共3个人 2个人打赌,第3个人作为见证人,那么就得保证见证人的唯一性,总不能说 你打赌输了,就在找个见证人证明说你们没打过赌或者说你赢了?虽然例子不是很形象但是能说明问题了,单例设计模式就是为了保证对象的唯一性。在单例设计中,对象时内部创建的,类只提供获得对象的方法,构造方法是私有的,表示你不能自己去创建对象
单例设计模式分为:恶汉试和懒汉式
  1. 饿汉式
  2. class Single{
  3. private Single(){} //私有化构造函数。
  4. private static Single s = new Single(); //创建私有并静态的本类对象。
  5. public static Single getInstance(){ //定义公有并静态的方法,返回该对象。
  6. return s;
  7. }
  8. }
  9. ---------------------------------------------
  10. //懒汉式:延迟加载方式。
  11. class Single2{
  12. private Single2(){}
  13. private static Single2 s = null;
  14. public static Single2 getInstance(){
  15. if(s==null)
  16. s = new Single2();
  17. return s;
  18. }
  19. }
复制代码
延迟加载:如果一直没有用到这个对象,就不会创建
如果不是延迟,不管用不用都会加载这个对象


作者: 357016138    时间: 2014-7-19 00:34
解决的问题:保证一个类在内存中的对象唯一性
作者: qqhao01    时间: 2014-7-19 01:56
单例设计模式
解决的问题:保证一个类在内存中对象的唯一性。
例如:多个程序读取一个配置文件时,建议将配置文件封装成对象,这样会方便操作其中数据。但是,又要保证多个程序读到的是同一个配置文件对象,这就需要该配置文件对象在内存中是唯一的了。
如何保证对象唯一性呢?
思想:
1.不让其它程序创建该类对象
2.在本类中创建一个本类对象
3.对外提供一个公有方法,让其它程序获取这个对象
步骤:
1.因为创建对象都需要构造函数初始化,所以只要将本类中的构造函数私有化,其它程序就无法在创建该类对象了。
2.在类中创建一个本类对象。
3.定义一个方法,返回该对象。让其它程序可以通过这个方法就得到本类对象。(作用:可控)
代码体现:
1.私有化构造函数  private 类名(){}
2.创建私有并静态的本类对象 private static 类名 s = new 类名();
3.定义公有并静态的方法,返回该对象 public static 返回值(类类型) 方法名(){return s;}
单例设计模式使用的注意
1.不要使用单例模式存取全局变量。这违背了单列模式的用意,最好放到对应类的静态成员中。
2.不要将数据库连接做成单例,因为一个系统可能与数据库有多个连接,并且在有连接池的情况下,应当尽可能及时释放连接。
   单例设计模式由于使用静态成员存储类实例,所以可能会造成资源无法及时释放。

作者: hejinzhong    时间: 2014-7-19 03:21
保证一个类在内存中对象的唯一性。单例的概念自己去好好理解下
作者: 郑阳阳    时间: 2014-7-19 08:42
单例设计是为了是类有唯一的对象,不让调用者重建对象




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2