黑马程序员技术交流社区

标题: 请教一个构造函数私有化后调用的一个小疑问 [打印本页]

作者: binghaiwang    时间: 2013-7-23 11:42
标题: 请教一个构造函数私有化后调用的一个小疑问
本帖最后由 binghaiwang 于 2013-7-23 14:13 编辑
  1. class Single{
  2.         private static Single s = null;
  3.         private  Single(){}
  4.         public  static  Single getInstance()   
  5.         {
  6.                 if(s==null)
  7.                 {
  8.                    synchronized(Single.class)
  9.                         {
  10.                                 if(s==null)
  11.                                         s = new Single();
  12.                         }                        
  13.                 }
  14.                 return s;
  15.         }
  16. }

  17. class SingleDemo{
  18.         public static void main(String[] args)
  19.                 {
  20.                         
  21.                    Single        p = Single.getInstance();  // 构造函数私有化,除了此方法对调用方法进行别名定义, 还有其他什么方式吗?此方式是最优的嘛?
  22.                
  23.                 }
  24. }
复制代码

作者: 陈贺    时间: 2013-7-23 11:57
私有只有在本类中才能调用,别的类即使建立了对象也无法访问。
作者: 郭俊    时间: 2013-7-23 12:06
写法有点让我纳闷,感觉你这个像是单例,但是又加了final ,以下是一个单例
  1. class Single { //这是一个单例模式
  2.   private static Single instance=new Single();
  3.   private Single(){}
  4.   static Single getInstance() {
  5.       return instance;
  6.   }
  7. }
复制代码
是单例的话,那么可以通过将属性设置为public的,或者构建get,set方法来调用其中的属性。
作者: 曹奎    时间: 2013-7-23 13:31
没明白楼主的意思
作者: Angel♥儱唲    时间: 2013-7-23 13:47
调用方法只有两种方式:
1,创建对象用对象去调用方法
2,写静态方法,用类名去调用
此处是单例模式中的懒汉式,所以构造函数的私有的,也就代表着此类无法创建对象了,并且类中方法是静态的。
只能用第二种的类名.方法名调用了
已经学的基础里不知道还有别的方法可以调用。或许还有我没学习到的
作者: Angel♥儱唲    时间: 2013-7-23 13:49
郭俊 发表于 2013-7-23 12:06
写法有点让我纳闷,感觉你这个像是单例,但是又加了final ,以下是一个单例是单例的话,那么可以通过将属性 ...

他这个就是单例模式,你的是饿汉式,他的是懒汉式,并且是解决了多线程安全隐患的格式
作者: 郭俊    时间: 2013-7-23 14:13
尹桥印 发表于 2013-7-23 13:49
final?我没明白你的意思

额 ,我回答错帖子了,我晕:'(
作者: 郭俊    时间: 2013-7-23 14:17
尹桥印 发表于 2013-7-23 13:49
final?我没明白你的意思

不对 ,是楼主更改了 代码,及内容中的问题
作者: 陈贺    时间: 2013-7-23 14:27
楼主编辑过了,这样的话只能用类名.方法名调用了。
作者: 周之浩    时间: 2013-7-23 14:33
对于单例设计模式有两个方式:懒汉式和饿汉式其中你所写的是懒汉式,没有饿汉式的用途多




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