Singleton Pattern可以用于多个(但是固定的)实例数

时间:2014-02-23 09:07:39

标签: design-patterns singleton

我遇到了一个关于设计模式的问题。

它要求在一个场景中使用apt设计模式,其中只创建了两个类的实例。我不确定答案,但后来的描述说Singleton可以用于这种情况。它说Singleton可以确保只创建一个类的实例或固定数(不是一个)。

我总是把Singleton模式看作一个模式,只能创建一个类的一个对象,因此解释让我感到惊讶。我不确定是否同意。

有什么想法吗?

Aditya

3 个答案:

答案 0 :(得分:2)

这是一个演示Multiton类的例子,该类完全包含n个对象:

public class Multiton
{
  private static Multiton[] instances;

  private Multiton() {}

  public static void initializeWithNumberOfInstances(int number)
  {
    instances = new Multiton[number];
  }

  public static Multiton getInstanceAtIndex(int index) throws Exception
  {
    if (instances == null)
      throw new Exception("Initialize number of instances first");

    if (instances[index] == null)
    {
      instances[index] = new Multiton();
    }

    return instances[index];
  }
}

答案 1 :(得分:0)

Singleton设计模式解决了所有这些问题。使用Singleton设计模式,您可以:

1.确保只创建了一个类的一个实例 2.提供对象的全局访问权限 3.在将来允许多个实例而不影响单例类的客户端

从上面说它只表示你只能创建一个类的实例并在任何地方使用它。如果我们这样认为我们实际上也可以创建这两个实例。

class Singleton
{
     private static Singleton instance1 = null;
     private static Singleton instance2 = null;
     private Singleton{}
     public static Singleton getInstance()
     {

         if(instance1 == null)
         {
               instance1 = new Singleton();
               return instance1;
         }
         else if(instance2 == null)
         {
               instance2 = new Singleton();
               return instance2;
         }
         return instance1;
     }
}

如果你想创建超过2个,那么你可以在getInsatance中创建,但最好创建一个类数组。

答案 2 :(得分:0)

multiton在管理有限池(例如线程,连接)以及控制/限制producer-consumer模式中的消费者数量方面具有共同的应用,例如here。也可以使用术语“单例登记”,尽管这可能是指在DictionaryHashMap中键入实例的常见实现,而不是设计概念。

根据@ Stefano的评论,用于管理实例的原始GOF单例implementation of using statics应替换为外部管理机制,例如IoC容器controlling the creation and lifespan of instances