我的项目中只需要一堆类的单个实例。但是,我需要它们可搜索/可检索(如数组)。我应该使用什么设计模式?
答案 0 :(得分:1)
我不确定我是否理解正确,但我认为您可能需要一个依赖注入容器。看看控制/依赖注入反转模式。
Microsoft Patterns& Practices提供了一个名为DI容器的实现 Unity。还有其他开源项目,如Castle Windsor和其他
您可以在容器中注册类型,例如,指定您希望某些类型为单例:
IUnityContainer container = new UnityContainer();
container.RegisterType<MyClass>(new ContainerControlledLifetimeManager());
...
var mySingletonType = container.Resolve<MyClass>(); // All calls to this method will
// return the same instance
IoC / DI实际上不止这个,但我希望这个例子对你有用作为一个起点。
答案 1 :(得分:1)
将集合封装在Singleton中。这有效地使所有包含的实例单身人士。
C#示例:
public class Singleton
{
public static Singleton Current { get; }
public IEnumerable<IFoo> Foos { get; }
}
您可以通过访问Singleton.Current.Foos
来枚举和查询Foos。由于Singleton封装了IFoo实例,因此它可以确保每个实例只有一个实例,但您也可以将每个IFoo实现转换为Singletons。但是,没有必要。
答案 2 :(得分:0)
正如其他人所说,你可能最好重新考虑你的设计并使用依赖注入。
但是你所描述的与Multiton Pattern类似,所以这也值得一看。
答案 3 :(得分:0)
Mark的解决方案的Java版本:
public class Singleton {
public static Singleton instance = new Singleton();
public Set<Singleton> singletons = new HashSet<Singleton>;
//Instance can only be created inside this class
private Singleton(){
}
static {
// Add all the singleton's to set
singletons.add(MyArray.class);
...
}
public static Singleton getInstance() {
return instance;
}
public static Set getSingletons() {
return singletons;
}
}