看Think in JAVA其中有一个例子没明白

ck_chuyun 2005-12-05 10:02:30
// 看Think in JAVA其中有一个例子没明白
//
// 这段程序是用来测试把所有构造函数设为私有时如何创建类对象,其中有一
// 部分(就是我用*号隔开的那个部分)书中说这用了设计模式的第一种,可我还
// 是不明白这到底干嘛.........?有什么意义

//Lunch.java

class 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();
}
} ///:~

...全文
445 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
ck_chuyun 2005-12-07
  • 打赏
  • 举报
回复
我看明白了,谢谢各位,不过我只是不理解这么做有什么用!JAVA编程思想真是本好书!我现在要学C#,每天晚上回来还坚持看它,感觉面向对象,没有比这本书更透的了
lubin83 2005-12-06
  • 打赏
  • 举报
回复
private私有构造函数 首先通过构造函数new对象是不可能了
其次 他自己private new了一个static的自己的对象 这个对象在外界是不能访问的,并且在内存中只有一份这个函数的实体。因为是static的所以当程序第一次用的这个函数时他就加载了static的资源。
然后 有一个static的函数public static Soup access() { return ps1; }
这个函数是static的 也就是说当java运行第一次用到这个类的时候就初始化了这个函数,并且只初始化一次。也就是说不管你调用了多少次的static函数,他只返回同一个对象内存空间。也就是同一个对象引用。也就是这个class在运行期最多只允许有一个对象生成。
不知你看得懂吗?文笔不好 呵呵
lzj34 2005-12-06
  • 打赏
  • 举报
回复
学习中............
hamlet3145 2005-12-05
  • 打赏
  • 举报
回复
静态
fashi1000 2005-12-05
  • 打赏
  • 举报
回复
跟public static void main() 意义差不多吧,要不程序没有入口,在内部的静态方法里调用
私有构造函数,返回给你一个对象实例的引用
EverythingMaster 2005-12-05
  • 打赏
  • 举报
回复
就是同一时刻只允许该类的一个实例存在。所以用了public的静态方法来返回一个静态的实例。
EverythingMaster 2005-12-05
  • 打赏
  • 举报
回复
单体模式
zhenyang2002 2005-12-05
  • 打赏
  • 举报
回复
如果不用 这个 public 方法,您怎样才能访问到 类中的 private 变量呢?
cara1312 2005-12-05
  • 打赏
  • 举报
回复
up 路过!
jgsfy 2005-12-05
  • 打赏
  • 举报
回复
同意congliu的说法:
singleton模式,保证所有 的soup的建立都由makeSoup()这个静态方法控制
blddp 2005-12-05
  • 打赏
  • 举报
回复
特殊的类,单例类
构造方法是私有的,比如runtime类就是这样的
congliu 2005-12-05
  • 打赏
  • 举报
回复
singleton模式,因为构造函数不是共有的,所以只能通过makeSoup得到,这样就能保证所有 的soup的建立都可以由makeSoup控制
kingofhawks 2005-12-05
  • 打赏
  • 举报
回复
楼上的全部解释过了,Singleton模式,只允许生成该类的一个实例.

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧