Ich soll einen Wrapper für einfaches Benutzen zweier völlig verschiedener Klassen (Druck, PDF-Export) bauen,
ohne dass Code bei deren Benutzung geändert werden soll.
Die Druckklasse definiert ein property FontName als Integer, die andere als String.
Daran kann ich aber nichts ändern.
Das wäre dann also das
Entwurfsmuster Adapter.
Das Problem ist nun dass ein Integer, der auf einen Fontnamen verweisst eben nun mal kein FontName ist.
Richtig wäre hier zwei verschiedene Properties einzuführen, die sich gegenseitig beeinflussen:
Delphi-Quellcode:
TAdapterBase = class
public
property FontIndex:Integer read GetFontIndex write SetFontIndex;
property FontName:string read FFontName write FFontName;
end;
Über die Funktionen SetFontIndex und GetFontIndex wird nun versucht, einem Index einen Namen zuzuweisen (verlustfrei möglich) und einem Namen einen Index zuzuweisen (nicht immer möglich).
Man benötigt dazu eine kleine Tabelle für die Umwandlung:
Delphi-Quellcode:
TFontIndexRecord = record
Name:string;
Index:integer;
end;
const
FontIndexArray:array[0..3] of TFontIndexRecord = (
(Name:'Arial';Index:0),
(Name:'Courier New';Index:1),
...
);
Die Basisklasse speichert immer nur den FontName, weil dieser allgemeiner als der FontIndex ist.