// 看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();
}
} ///:~
//
// 这段程序是用来测试把所有构造函数设为私有时如何创建类对象,其中有一
// 部分(就是我用*号隔开的那个部分)书中说这用了设计模式的第一种,可我还
// 是不明白这到底干嘛.........?有什么意义//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();
}
} ///:~
私有构造函数,返回给你一个对象实例的引用
构造方法是私有的,比如runtime类就是这样的
singleton模式,保证所有 的soup的建立都由makeSoup()这个静态方法控制
其次 他自己private new了一个static的自己的对象 这个对象在外界是不能访问的,并且在内存中只有一份这个函数的实体。因为是static的所以当程序第一次用的这个函数时他就加载了static的资源。
然后 有一个static的函数public static Soup access() { return ps1; }
这个函数是static的 也就是说当java运行第一次用到这个类的时候就初始化了这个函数,并且只初始化一次。也就是说不管你调用了多少次的static函数,他只返回同一个对象内存空间。也就是同一个对象引用。也就是这个class在运行期最多只允许有一个对象生成。
不知你看得懂吗?文笔不好 呵呵