Considérons une interface commeorientation objet et sérialisation
IMyInterface = interface
procedure DoSomethingRelevant;
procedure Load (Stream : TStream);
procedure Save (Stream : TStream);
end;
et plusieurs classes qui mettent en œuvre l'interface:
TImplementingClass1 = class (TInterfacedObject, IMyInterface)
...
end;
TImplementingClass2 = class (TInterfacedObject, IMyInterface)
...
end;
...
J'ai une classe qui a une liste de IMyInterface implementors:
TMainClass = class
strict private
FItems : TList <IMyInterface>;
public
procedure LoadFromFile (const FileName : String);
procedure SaveToFile (const FileName : String);
end;
Maintenant à la question: comment puis-je charger la classe principale et en particulier la liste des éléments dans un objet orienté manière ed? Avant de pouvoir appeler la méthode de chargement virtuelle pour les éléments, je dois les créer et donc connaître leur type. Dans mon implémentation actuelle je stocke le nombre d'articles et pour chaque élément
- un identificateur de type (IMyInterface obtient une fonction GetID supplémentaire)
- appel à la méthode Enregistrer de l'élément
Mais ce signifie que pendant le chargement que je dois faire quelque chose comme
ID := Reader.ReadInteger;
case ID of
itClass1 : Item := TImplementingClass1.Create;
itClass2 : Item := TImplementingClass2.Create;
...
end;
Item.Load (Stream);
Mais cela ne semble pas être orienté objet très que je dois jouer du violon avec le code existant tout temps, j'ajoute un nouvel implémenteur. Y a-t-il une meilleure façon de gérer cette situation?
Delphi. Il me surprend chaque fois que je vois du code Delphi dans les forums/forums/sites actuels. Je n'avais pas réalisé qu'il était encore utilisé autant. –
@jeyoung: Delphi est et reste l'option ** BEST ** et la plus productive actuellement disponible pour l'écriture de code Windows 32 bits natif - pourquoi êtes-vous si surpris? –