黑马程序员技术交流社区

标题: 单例模式有几种方式 [打印本页]

作者: limengpiao    时间: 2014-9-10 14:32
标题: 单例模式有几种方式
java中单例模式除了饿汉式和懒汉式还有别的模式吗?饿汉式和懒汉式的区别又是什么,不知道哪位朋友能给解答下

作者: 15579171087    时间: 2014-9-10 14:33
懒汉式能够延迟加载。。。
作者: limengpiao    时间: 2014-9-10 15:40
15579171087 发表于 2014-9-10 14:33
懒汉式能够延迟加载。。。

呃,刚查了一些资料,理解你的意思了,好像还有线程同步的区别,谢谢啊
作者: Fightin黑马    时间: 2014-9-10 20:56
饿汉式和懒汉式的区别
  1,饿汉式是空间换时间:会随着类的加载而加载,可能你用不到但是已经在堆里占用了空间
    懒汉式是时间换空间:用的时候才创建对象,但是会多增加代码,每次都要判断引用是不是空
  2,多线程访问饿汉式不会创建多个实例:只会创建一个实例对象,不会因为多线程多创建出对象.
   多线程访问懒汉式有可能会创建多个实例,所以多线程不能用懒汉式:在程序运行到判断是不是空的时候如果被其他线程抢过去,那么多个线程都会创建各自线程的实例对象,
开发中实际用的多为饿汉式,但是面试什么的都会问懒汉式.
还有一种就是:
1.私有构造函数
2.实例化本类对象,把引用定义成fianal和static的,这样就可以保证不被修改了
作者: 思维    时间: 2014-9-10 22:11
单例设计模式:懒汉式、饿汉式、登记式、枚举式,我就知道这四种!
作者: 李春丽    时间: 2014-9-10 23:07
本帖最后由 李春丽 于 2014-9-11 07:48 编辑

java中单例模式是一种常见的设计模式,我知道的有三种:懒汉式、饿汉式、登记式三种。
  单例模式有以下特点:
  1、单例类只能有一个实例。
  2、单例类必须自己自己创建自己的唯一实例。
  3、单例类必须给所有其他对象提供这一实例。
区别:
懒汉式:多个人调用时(多线程),不能保证唯一。
对象是方法被调用时,才初始化,也叫做对象的延时加载。
Single类进内存,对象还没有存在,只有调用了getInstance方法时,才建立对象。
  1. class Single
  2. {
  3. private Single(){}
  4. private static Single s = null;//Single类一进内存,赋值为空。
  5. public static Single getInstance()
  6. {
  7.   if(s==null)
  8.    s = new Single(); //发生在方法被调用时。注意,如果不执行这句代码,那么就不会给对象初始化。
  9.   return s;
  10. }
  11. }
复制代码
饿汉式     【开发一般用饿汉式】安全简单
这个是先初始化对象。
Single类一进内存,就已经创建好了对象。
  1. <p>class Single
  2. {
  3. private Single(){}
  4. private static Single s = new Single();//一进内存就马上创建对象。很饿,马上就吃,刻不容缓~~~~
  5. public static Single getInstance()
  6. {
  7.   return s;
  8. }</p><p>}</p>
复制代码


作者: xpsyztd    时间: 2014-9-10 23:08
路过学习
作者: noiary    时间: 2014-9-10 23:27
之前看过一个技术贴,说有七种
作者: 笑脸迷人    时间: 2014-9-10 23:29
7种~~~我飘过~~




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