黑马程序员技术交流社区

标题: 单利设计模式中,这句话可不可以去掉? [打印本页]

作者: Nero    时间: 2013-9-1 14:58
标题: 单利设计模式中,这句话可不可以去掉?
本帖最后由 杨增坤 于 2013-9-3 08:50 编辑

如题...................................................

$6C(PBXTJSBOP_$Y9}9AXVX.jpg (29.64 KB, 下载次数: 36)

这个构造函数可不可以去掉,去掉的话,系统会默认自动分配一个相同的隐式构造函数!对吧 所有这句话有没有 ...

这个构造函数可不可以去掉,去掉的话,系统会默认自动分配一个相同的隐式构造函数!对吧  所有这句话有没有 ...

作者: 范龙波    时间: 2013-9-1 15:01
本帖最后由 范龙波 于 2013-9-1 15:05 编辑

不可以.............你要看清楚 , 它写的这个单例是把构造函数私有化了.
设计单例的三个步骤:
1.创建私有成员引用
2.私有构造函数
3.暴露获取实例对象的方法

作者: 裴昊    时间: 2013-9-1 15:06
这个真心不可以,如果去掉了,外部可以使用构造方法了.怎么实现 "单实例"呢
作者: 月黑风高    时间: 2013-9-1 15:19
那请问系统默认的隐式构造函数的权限是private的吗?!
作者: ★忙碌★    时间: 2013-9-1 15:20
亲,不可以,默认生成的构造方法是同包访问,就是只要和这个类在一个包下面的类都可以访问到,而单例模式是不允许外界任何类直接访问,所以不能去掉!菜鸟,希望对你有帮助
作者: binghaiwang    时间: 2013-9-1 15:25
绝对不可以,单例的目的就是不让new对象,如果你不把构造函数私有化也就是不写,那么他就默认是被default修饰的构造函数,也就是说这个对象可以被同一个包名下的其他类创建对象,那么这个就不是单例了。

作者: HM张博文    时间: 2013-9-1 15:54
楼上的正解,默认的无参构造函数是default的,不是private的
作者: qqhao01    时间: 2013-9-1 16:02
单例模式想要保证对象唯一有以下三部
1.为了避免其他程序过多建立该类对象,先禁止其他程序建立该类对象。
2.还为了让其他程序可以访问到该类对象,只好在本类中,自定义一个对象。
3.为了方便其他程序对自定义对象的访问,可以对外提供一些访问方式。

这三部怎么用代码体现呢?
1.将构造函数私有化。
2.在类中创建一个本类对象。
3.提供一个方法可以获取到该对象。

所以这段代码是不可以去掉的,系统默认那个不是私有的
作者: 薛鹏鹏    时间: 2013-9-1 16:29
如果您的问题已经解决
请更改分类未解决为已解决
保持队形,谢谢合作

详情参考 如何修改分类

作者: masterV    时间: 2013-9-1 16:30
隐式不代表私有,如果构造方法不私有,那么就可以随便new其对象了
作者: .....淡定    时间: 2013-9-1 16:47
题目是单例模式 不是单利,没有写构造函数 就默认为public形式的 不能进行 单例设计
作者: 雷鬼    时间: 2013-9-1 18:18
你用java逆向工具逆向一下编译之后的class文件,就会发现,省略的构造函数是default类型。单例设计模式的基础就是从私有化构造函数开始的,构造函数不私有化,还谈什么单例模式呢?
作者: 常振宇    时间: 2013-9-1 23:15
那行代码是为了代替默认的构造方法;public single(){};所以不能去掉,去掉的话就可以直接new一个实例了,那么单态设计模式就毫无意义了。
作者: lonely_zb    时间: 2013-9-1 23:59
它写的这个单例是把构造函数私有化了.
作者: itachi    时间: 2013-9-2 14:19
私有化构造函数是为了防止别人创建对象,默认的构造函数是没有这个功能的
先搞清楚什么事单例模式
作者: 李锡碧    时间: 2013-9-2 19:08
首先告诉楼主,去掉构造函系统会隐式的分配一个构造函数这是正确的。可是,这个被分配的构造函数依旧可以被被人用来创建实例。
  1. class Singleton
  2. {
  3.         //使用一个变量来缓存曾经创建的实例
  4.         private static Singleton instance;
  5.         //将构造器使用private修饰,隐藏该构造器
  6.         private Singleton(){};
  7.        
  8.         //提供一个静态方法,用于返回Singleton实例
  9.         //该方法可以加入自定义的控制,保证只产生一个Singleton对象
  10.         public static Singleton getInstance(){
  11.                 //如果instance为null,表明还不曾创建Singleton对象
  12.                 //如不为null,则表明已经创建了Singleton对象
  13.                 if(instance==null){
  14.                         //创建一个Singleton对象,并将其缓存起来
  15.                         instance = new Singleton();
  16.                 }
  17.                 return instance;
  18.         }

  19. }

  20. class TestSingleton
  21. {
  22.         public static void main(String[] args){
  23.                 //创建Singleton对象不能通过构造器,只能通过getInstance()创建
  24.                 Singleton s1 = Singleton.getInstance();
  25.                 Singleton s2 = Singleton.getInstance();
  26.                 //输出 true的哦(单例)
  27.                 System.out.println(s1==s2);
  28.         }
  29. }
复制代码





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