如果我需要一组单例类可搜索/可检索,我应该使用什么样的设计模式?

时间:2011-04-11 13:46:02

标签: design-patterns

我的项目中只需要一堆类的单个实例。但是,我需要它们可搜索/可检索(如数组)。我应该使用什么设计模式?

4 个答案:

答案 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;
      } 


  }