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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© yanyoucheng520 中级黑马   /  2014-7-18 23:56  /  1450 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

单例设计主要有些什么用处

6 个回复

倒序浏览
用于在内存中只有一个对象,例如7K面试题中的号码管理器就是
回复 使用道具 举报
解决的问题:保证一个类在内存中的对象唯一性。
比如:多程序读取一个配置文件时,建议配置文件封装成对象。会方便操作其中数据,又要保证多个程序读到的是同一个配置文件对象,就需要该配置文件对象在内存中是唯一的。
例如总共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. }
复制代码
延迟加载:如果一直没有用到这个对象,就不会创建
如果不是延迟,不管用不用都会加载这个对象

评分

参与人数 1技术分 +1 收起 理由
SyouRai_Tsk + 1

查看全部评分

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