首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >单例模式示例

单例模式示例
EN

Stack Overflow用户
提问于 2010-03-19 14:26:19
回答 6查看 4.9K关注 0票数 1

请给我一个单件模式的实时例子。不同的线程访问一个共享文件是否是单例的?因为每个线程访问的是文件的相同实例,而不是它们自己的单独实例。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2010-03-19 14:30:01

是的,但前提是所有线程都访问同一个文件,并且您使用的是自定义实现(而不是java.io.File,可能是包装器)。

单例模式是一种设计模式,用于将类的实例化限制为一个对象

单例(通常是一个糟糕的选择)是在整个程序中只能有一个实例的类。

例如,SingletonConfigFile可能如下所示。请记住:

  • 它仅用于读取一个文件。如果你的类可以被多次实例化,对于不同的文件,它不是singleton.
  • don't
  • -它没有考虑到并发问题,这是一个完全不同的讨论领域。

代码语言:javascript
复制
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() -只有一颗叫做“太阳”的星星。
  • 所有在你的应用程序中逻辑上应该只存在一次的对象-注册表,应用程序上下文等。
票数 1
EN

Stack Overflow用户

发布于 2010-03-19 14:32:11

“文件”不是Java对象( java.io.File也绝对不是单例对象)。我也不认为磁盘上的文件是单独的--它们只是共享的资源。尤其是,磁盘上并不是只有一个文件:)

单例模式的一个更常见的示例是配置或日志记录。例如,LogManager.getLogManager返回“LogManager”,而您不能创建新的For。同样,您可能有一个可以静态访问的公共配置对象。(在依赖注入系统中,配置可能不是单例的-相反,每个组件都被提供了它们所需的配置位,这样它们就不必获取一个“公共”配置。)

票数 4
EN

Stack Overflow用户

发布于 2010-03-19 14:32:54

单例通常意味着拥有一个只能存在一个实例的类。

一个松弛可能是具有一个众所周知的系统范围的单个实例的类(除了您可能创建的其他实例之外)。

java.io.File不是单例类。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2475380

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档