德尔福工厂采用通用型

时间:2015-11-06 03:13:31

标签: delphi generics

我有一个泛型类型,如下所示,并希望通过创建TItem的后代创建一个工厂来生成IItem。进一步想要使用Parent TItem注册工厂,以便它可以生成在工厂注册的类型的多个子对象。我已经看到这个在TDictionary中注册的工厂完成但从未使用参数化类型。

Type
  IItem<T> = interface (IInterface)
    Function GetParent:IItem<T>;
    Procedure SetParent(aItem:IItem<T>);
    property Parent:IItem<T> read GetParent write SetParent;
  end;

  TItem<T> = class(TInterfacedObject,IItem<T>)
  private
    FParent : IItem<T>;
    FData : T;
    Function GetParent:IItem<T>;
    Procedure SetParent(aItem:IItem<T>);
  public
    property Parent:IItem<T> read GetParent write SetParent;
    Constructor Create(aParent:IItem<T>);
  end;

我想使用一个TItemFactory,通过将类传递给构造函数来创建实现TITem后代的IITem。将从TItem中调用此工厂,因此只有在使用具体数据类型实例化TITem时才会知道T.我试图创建这个工厂类,但编译器拒绝我尝试使用泛型类型。我的问题是如何创建TItemFactory类并能够传入要创建的类。

我对此的看法是:

  TItemClass = class of TItem<T>;

  TItemFactory<T>= class (TObject)
    Function getItem:IItem<T>;
    constructor Create(AClass:TItemClass);
  end;

然而,这不能编译,所以我必须走错路。

0 个答案:

没有答案