Ich suche nach einem einfachen Beispiel, wie man eine Factory-Klasse implementiert, aber ohne die Verwendung eines Schalters oder einer Wenn-Dann-Anweisung. Alle Beispiele, die ich finden kann, benutzen eins. Zum Beispiel, wie könnte man dieses einfache Beispiel ändern (unten), so dass die tatsächliche Fabrik nicht vom Switch abhängig ist? Es scheint mir, dass dieses Beispiel das Open / Close-Prinzip verletzt. Ich möchte in der Lage sein, konkrete Klassen ('Manager', 'Clerk', 'Programmer' usw.) hinzuzufügen, ohne die Fabrikklasse ändern zu müssen.
Danke!
%Vor%UPDATE:
Wow! Danke allen! Ich habe eine Tonne gelernt. Nachdem ich alle Rückmeldungen erhalten hatte, mischte ich einige der Antworten ein und kam auf diese Idee. Ich wäre offen für einen weiteren Dialog über einen besseren Weg, dies zu tun.
%Vor%Eine andere Bearbeitung:
Es ist auch möglich, eine Instanz der Schnittstelle mit einem unbekannten Typ zu erstellen:
%Vor%Was könnte dann wie folgt aufgerufen werden:
%Vor% Wie wäre es damit (kein Wörterbuch erforderlich und beachten Sie, dass Sie einen Syntaxfehler erhalten, wenn Sie Create<Position>()
versuchen):
EDIT - Aktualisiert, um eine explizit implementierte IPosition-Schnittstelle zu verwenden. Nur Instanzen von IPosition können auf die Elementfunktionen zugreifen (z. B. <implementation of Manager>.Title
wird nicht kompiliert).
EDIT # 2 Factory.Create sollte bei richtiger Verwendung der Schnittstelle eine IPosition nicht T zurückgeben.
%Vor%Tags und Links c# factory-pattern factory