假設我有一個tModel:通用工廠
TModelClass = class of TModel;
TModel = class
procedure DoSomeStuff;
end;
和2個後代:
TModel_A = class(TModel);
TModel_B = class(TModel);
和工廠:
TModelFactory = class
class function CreateModel_A: TModel_A;
class function CreateModel_B: TModel_B;
end;
現在我想重構了一下:
TModelFactory = class
class function CreateGenericModel(Model: TModelClass) : TModel
end;
class function TModelFactory.CreateGenericModel(Model: TModelClass) : TModel
begin
...
case Model of
TModel_A: Result := TModel_A.Create;
TModel_B: Result := TModel_B.Create;
end;
...
end;
到目前爲止沒關係,但每次創建TModel
後代時,我都必須修改工廠case
聲明。
我的問題:這是可能的,以建立100%的通用工廠爲我所有TModel
後代,所以每次我創建一個TModel
的後代,我沒有修改TModelFactory
?
我試着玩Delphi 2009的泛型,但沒有找到有價值的信息,都與TList<T>
等的基本用法有關。
更新 很抱歉,但也許我不清楚或不理解你的答案(我還是個小白),但我想要實現的是:
var
M: TModel_A;
begin
M: TModelFactory.CreateGenericModel(MY_CONCRETE_CLASS);
是的,這是最簡單的方法。可能需要基礎上的虛擬構造函數(但前提是後代具有自己的構造函數代碼)。 – 2009-07-09 12:48:10