我遇到了一个关于设计模式的问题。
它要求在一个场景中使用apt设计模式,其中只创建了两个类的实例。我不确定答案,但后来的描述说Singleton可以用于这种情况。它说Singleton可以确保只创建一个类的实例或固定数(不是一个)。
我总是把Singleton模式看作一个模式,只能创建一个类的一个对象,因此解释让我感到惊讶。我不确定是否同意。
有什么想法吗?
Aditya
答案 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。也可以使用术语“单例登记”,尽管这可能是指在Dictionary
或HashMap
中键入实例的常见实现,而不是设计概念。
根据@ Stefano的评论,用于管理实例的原始GOF单例implementation of using static
s应替换为外部管理机制,例如IoC
容器controlling the creation and lifespan of instances。