- 1. Beispiel
Dieses Muster ist nützlich, wenn Sie die Klassenerstellung kapseln und konkrete Klasseninformationen über eine abstrakte Schnittstelle von der Clientanwendung isolieren möchten.
Ein Beispiel dafür könnte auftreten, wenn Sie eine objektorientierte Geschäftsanwendung haben, die möglicherweise mehreren Ziel-DBMS zugeordnet ist. Die Client-Anwendung möchte nur etwas über die Business-Klassen wissen, nicht über deren Speicherung und spezifische Implementierung zum Abrufen von Daten.
Beispiel
Im Beispiel der abstrakten Fabrik ist jede der Widget-Erzeugungsfunktionen eine virtuelle Fabrikmethode. In unserer Implementierung definieren wir als Rückgabewert eine konkrete Widget-Klasse.
TRedSpeedButton = class(TSpeedButton) public constructor Create(AOwner: TComponent); override; end; constructor TRedSpeedButton.Create(AOwner: TComponent); begin inherited Create(AOwner); Font.Color := clRed; end; function TORedFactory.CreateSpeedButton(AOwner: TComponent): TSpeedButton; begin Result := TRedSpeedButton.Create(AOwner); end;