黑马程序员技术交流社区

标题: 单例设计模式的private关键字的问题 [打印本页]

作者: 于XINCHENG    时间: 2013-9-2 00:39
标题: 单例设计模式的private关键字的问题
本帖最后由 杨增坤 于 2013-9-3 11:06 编辑
  1. class Single01 {
  2.         private Single01() {
  3.         }
  4.         private static Single01 s01 = new Single01(); // 这里的private关键字到底有什么作用?
  5.         public static Single01 getInstance01() {
  6.                 return s01;
  7. }
  8. }
复制代码
问题请参见注释,当我封装构造方法后,我在类Single01的外面已经不能再创建Single01的对象了,如果我去掉注释中的private关键字,编译,运行都没有报错,那为什么还要在那里加上private关键字呢?

作者: 范龙波    时间: 2013-9-2 00:45
为什么叫单例?这种设计模式解决了什么问题?
学技术别硬记啊.
设计单例的目的就是解决在内存中只允许有一个实例对象的存在,你把构建方法都暴露出去 ,还叫什么单例.

作者: 路边小色狼    时间: 2013-9-2 01:26
是可以不加的,毕老师有说 成员变量一般可以私有化一下,不私有化也行,对这里的情况没影响。
作者: joechen    时间: 2013-9-2 07:48
本帖最后由 joechen 于 2013-9-2 07:53 编辑

单例设计模式:
解决一个类在内存中只存在一个对象
要想保证对象唯一:
1,为了避免其他程序过多建立该类对象,先禁止其他程序建立该类对象
2,还为了让其他程序访问到该类对象,只好在本类中自定义一个对象
3,对外提供一些访问方式,方便其他程序对自定义对象的访问
步骤:
1,将构造函数私有化
2,在类中创建一个本类对象
3,提供一个方法可以获取到该类对象class Single01 {
        private Single01() {//将构造函数私有化
        }
        private static Single01 s01 = new Single01(); // 这里的private关键字到底有什么作用?(在类中创建一个本类对象,单例设计模式得用)
        public static Single01 getInstance01() {//对外提供一个方法可以获取到该类对象
                return s01;
}
}



作者: EYE_SEE_YOU    时间: 2013-9-2 08:33
private修饰成员和构造函数
被修饰的内容只能被本类对象访问
单例模式是指程序中的操作始终都围绕同一个对象进行
这里用的一种思想是
1.在本类中创建一个本类对象
2.私有化类中的构造函数,目的是外界不能再调用这个构造函数,就不能再建立对象
3.提供公有方法使外界获得对象
作者: itachi    时间: 2013-9-2 14:09
单例模式顾名思义只能有一个对象,不允许随便创建对象,构造函数当然要私有了,这样别人就不能创建对象
只能由本类创建一个对象,并由本类提供一个获得这个对象的方法
作者: masterV    时间: 2013-9-2 15:55

看图,这是《深入浅出设计模式》中的内容,跟我想的差不多,为了限于内部调用,说白了就是显得专业。
你知道,如果不私有的话,我们可以直接通过Singleton.instance来获取该类实例,那么getInstance方法没失去作用了。。不专业。





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