// 看Think in JAVA其中有一个例子没明白
//
// 这段程序是用来测试把所有构造函数设为私有时如何创建类对象,其中有一
// 部分(就是我用*号隔开的那个部分)书中说这用了设计模式的第一种,可我还
// 是不明白这到底干嘛.........?有什么意义//Lunch.javaclass Soup {
  private Soup() {}
  // (1) Allow creation via static method:
  public static Soup makeSoup() {
    return new Soup();
  }
  
//************************************************************
//下面这部分不明白
  // (2) Create a static object and return a reference
  // upon request.(The "Singleton" pattern):
  private static Soup ps1 = new Soup();
  public static Soup access() {
    return ps1;  // 为什么要这么做?
  }
  public void f() {}
//*************************************************************
}class Sandwich { // Uses Lunch
  void f() { new Lunch(); }
}// Only one public class allowed per file:
public class Lunch {
  public static void main(String[] args) {
    // Can't do this! Private constructor:
    //! Soup priv1 = new Soup();
    Soup priv2 = Soup.makeSoup();
    Sandwich f1 = new Sandwich();
    Soup.access().f();
  }
} ///:~

解决方案 »

  1.   

    如果不用 这个 public 方法,您怎样才能访问到 类中的 private 变量呢?
      

  2.   

    就是同一时刻只允许该类的一个实例存在。所以用了public的静态方法来返回一个静态的实例。
      

  3.   

    跟public static void main() 意义差不多吧,要不程序没有入口,在内部的静态方法里调用
    私有构造函数,返回给你一个对象实例的引用
      

  4.   

    楼上的全部解释过了,Singleton模式,只允许生成该类的一个实例.
      

  5.   

    singleton模式,因为构造函数不是共有的,所以只能通过makeSoup得到,这样就能保证所有 的soup的建立都可以由makeSoup控制
      

  6.   

    特殊的类,单例类
    构造方法是私有的,比如runtime类就是这样的
      

  7.   

    同意congliu的说法:
    singleton模式,保证所有 的soup的建立都由makeSoup()这个静态方法控制
      

  8.   

    private私有构造函数 首先通过构造函数new对象是不可能了
    其次 他自己private new了一个static的自己的对象 这个对象在外界是不能访问的,并且在内存中只有一份这个函数的实体。因为是static的所以当程序第一次用的这个函数时他就加载了static的资源。
    然后 有一个static的函数public static Soup access() {    return ps1;   }
    这个函数是static的 也就是说当java运行第一次用到这个类的时候就初始化了这个函数,并且只初始化一次。也就是说不管你调用了多少次的static函数,他只返回同一个对象内存空间。也就是同一个对象引用。也就是这个class在运行期最多只允许有一个对象生成。
    不知你看得懂吗?文笔不好 呵呵
      

  9.   

    我看明白了,谢谢各位,不过我只是不理解这么做有什么用!JAVA编程思想真是本好书!我现在要学C#,每天晚上回来还坚持看它,感觉面向对象,没有比这本书更透的了