黑马程序员技术交流社区

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

作者: 风飘逸    时间: 2015-3-26 18:41
标题: 单例设计模式
在单例设计模式中,如果在不同的类中调用具有私有构造函数的类中的获得对象的方法,获得的对象是一个对象吗?不是每次调用该方法的时候该类在内存中的状态是怎么样的,老感觉每次调用该方法,都会新new一个类
作者: 黑色救护车    时间: 2015-3-27 09:07
本帖最后由 黑色救护车 于 2015-3-27 09:09 编辑

不会的,你看毕老师画的那个图了吗?每次调用getInstance()方法的时候,其实都是将堆内存中同一个对象的内存地址赋给不同的栈内存中变量而已,因此所有引用都指向堆内存中同一个对象。new Single对象的过程是在Single类当中完成的,由于Single类的构造方法是私有,其他程序没有办法new出Single对象。其他程序要得到Single对象,只能通过getInstance()方法,而getInstance()方法返回的都是Single类中new出来的Single对象,这是唯一的。老师没有去new对象喔,老师只是在另一个类中调用Single类的方法,而private static Single s = new Single();这句话只会执行一次喔!

如上图,比如再来一个Single s1 = Single.getInstance();
1)在栈内存开一个空间储存s1;
2)getInstance()方法返回一个Single对象s,将Single对象的内存地址赋给s1;
3)即s1同样也指向Single对象



作者: 艺多不压身丶    时间: 2015-3-27 09:56
不错不错




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