请给我一个单件模式的实时例子。不同的线程访问一个共享文件是否是单例的?因为每个线程访问的是文件的相同实例,而不是它们自己的单独实例。
发布于 2010-03-19 14:30:01
是的,但前提是所有线程都访问同一个文件,并且您使用的是自定义实现(而不是java.io.File,可能是包装器)。
单例模式是一种设计模式,用于将类的实例化限制为一个对象
单例(通常是一个糟糕的选择)是在整个程序中只能有一个实例的类。
例如,SingletonConfigFile可能如下所示。请记住:
。
public SingletonConfigFile {
private static String filename = "config.xml";
private File file;
private static SingletonConfigFile instance;
private SingletonConfigFile() {
if (instance != null) {
throw new Error();
}
file = new File(filename);
}
public synchronized SingletonConfigFile getInstance() {
if (instance == null) {
instance = new SignletonConfigFile();
}
return instance
}
public String read() {
// delegate to the underlying java.io.File
}
}但是这个例子有点不切实际。单例是在只有一个对象的情况下使用的(如上所述)。例如,拥有以下内容将是有意义的:
RingOfPower.getInstance() -只有一个权力环(索隆的),并且不可能存在more.Sun.getInstance() -只有一颗叫做“太阳”的星星。发布于 2010-03-19 14:32:11
“文件”不是Java对象( java.io.File也绝对不是单例对象)。我也不认为磁盘上的文件是单独的--它们只是共享的资源。尤其是,磁盘上并不是只有一个文件:)
单例模式的一个更常见的示例是配置或日志记录。例如,LogManager.getLogManager返回“LogManager”,而您不能创建新的For。同样,您可能有一个可以静态访问的公共配置对象。(在依赖注入系统中,配置可能不是单例的-相反,每个组件都被提供了它们所需的配置位,这样它们就不必获取一个“公共”配置。)
发布于 2010-03-19 14:32:54
单例通常意味着拥有一个只能存在一个实例的类。
一个松弛可能是具有一个众所周知的系统范围的单个实例的类(除了您可能创建的其他实例之外)。
java.io.File不是单例类。
https://stackoverflow.com/questions/2475380
复制相似问题