【问题标题】:What do you call a "singleton" that allows a public constructor for additional instances?您将什么称为“单例”,它允许为其他实例使用公共构造函数?
【发布时间】:2011-06-09 13:43:39
【问题描述】:

我正在创建一个支持单例使用的类(一个实例可用),但它也支持普通实例使用(通过公共构造函数)。

如果你只想要一个,就用那个。如果你想要 5 个,就新建一个。

我显然不能调用这个单例,否则其他一些开发人员会出现并使我的构造函数不公开。我可以称之为什么来表明它是如何使用的?命名很难。

一些猜测供您娱乐: “静态可用”? “线程就绪”? “单例可选”?

【问题讨论】:

    标签: constructor singleton design-patterns naming


    【解决方案1】:

    听起来你有一个“默认实例”。您可以按照这些原则命名您的对象。

    【讨论】:

    • 如果我们必须给这个结构起个名字的话,这个名字再好不过了。
    • 这个名字最适合我的情况,但其他名字也很好!感谢 StackOverflow!
    【解决方案2】:

    通常,单例的要点是针对具有唯一实例的对象。如果类的多个副本可以存在,那么这意味着“一体”不是必要的行为。这就像任何其他对象一样。

    您将其编码为 Singleton 的原因可能是为了全局访问。那就叫它全局对象吧。

    【讨论】:

      【解决方案3】:

      游泳池?

      (特别是如果你很早就知道实例计数如何,但想封装一些构造/销毁的行为)

      【讨论】:

      • 我真的很喜欢 Pool,但我想会有一些开发人员在我身后,让它容纳所有新的实例,而不是一个共享的实例。
      【解决方案4】:

      对我来说这听起来不像是一个单例,它听起来像一个总是至少有一个实例的常规类。将其称为单例,并像编写代码一样编写代码(例如private static MySingleton instance = new MySingleton();)会令人困惑 - 以某种方式将“始终存在”的实例与您的类定义分离。在您的实现中明确说明这是一个普通类,恰好总是有至少 1 个实例。

      【讨论】:

        【解决方案5】:

        您可以创建一个默认实例 getter。

        private TheClass defaultInstance;
        public Default{ get{ return defaultInstance??(defaultInstance = new TheClass());}
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-08-17
          • 2015-12-22
          • 1970-01-01
          • 1970-01-01
          • 2015-11-03
          • 2010-09-23
          相关资源
          最近更新 更多