Wann ist es sinnvoller, ein Factory-Muster anstelle eines überladenen Konstruktors zu verwenden, um ein Objekt zu instanziieren?

8

In Karl Seguins Grundlagen der Programmierung ist ein kleiner Abschnitt zur Verwendung des Werksmusters. Er schließt die Passage mit der Aussage "Sie können die gleiche Funktionalität mit Konstruktorüberladung erreichen", gibt aber nicht an, wann oder warum?

Wann ist es also sinnvoller, das Factory-Muster anstelle eines überladenen Konstruktors zu verwenden, um ein Objekt zu instanziieren?

    
JaredCacurak 09.10.2009, 00:46
quelle

7 Antworten

4

Wenn Sie eine lockere Kopplung haben wollen, dann macht die Fabrik mehr Sinn, da Sie dann einfach die Autofabrik anrufen, die Suv enum übergeben und die richtige Klasse zurückgeben können. Ihrer Anwendung ist es egal, welche Klasse tatsächlich zurückgegeben wurde, solange sie Ihren Anforderungen entspricht.

    
James Black 09.10.2009, 00:50
quelle
4

Wenn Sie Dependency Injection durchführen, müssen Sie Instanzen der Abhängigkeit je nach Bedarf innerhalb der abhängigen Option erstellen ist eine Schnittstelle zu einer Klassenfabrik zu injizieren. Die Factory kann eine Schnittstelle oder eine abstrakte Klasse zurückgeben. Dies bietet Flexibilität, Testbarkeit und Entkopplung auf Kosten einer gewissen Komplexität.

    
TrueWill 09.10.2009 02:12
quelle
2

Ich benutze eine Factory, wenn ich möchte, dass die Factory eine von mehreren möglichen Unterklassen erstellt (und ich möchte, dass der Aufrufer etwas über die Basisklasse weiß, aber nichts über die Unterklassen weiß).

Gelegentlich verwende ich auch statische Methoden der Klasse anstelle eines überladenen Konstruktors, wenn die verschiedenen statischen Methoden die gleichen Parametertypen verwenden (und daher können Konstruktoren nicht allein aufgrund des Parametertyps überladen werden). Hier ist ein künstliches Beispiel:

%Vor%     
ChrisW 09.10.2009 00:50
quelle
1

Ich stimme seiner Aussage nicht zu. Verschiedene Konstruktoren werden verwendet, wenn Sie verschiedene Methoden zum Konstruieren / Initialisieren des Konstruktors verwenden. Das Factory-Muster wird verwendet, wenn die Initialisierungskriterien dazu führen, dass Sie verschiedene Objekte erstellen müssen.

    
Martin Spamer 09.10.2009 11:44
quelle
0

Ich habe 1 Situation, in der eine Fabrik nützlich ist. Ich muss einen Videoeffekt instanziieren, um auf einem Video zu laufen. Je nach Art des Videos hat der Videoeffekt eine andere konkrete Klasse.

Wenn ich die konkrete Klasse instanziiere, verliere ich später die Fähigkeit, weitere Videoeffekte hinzuzufügen, ohne den Instanziierungscode zu ändern.

Wenn ich weitere Videoeffekte hinzufüge, muss ich nur die Fabrik ändern, um die richtige konkrete Klasse auszuwählen.

Macht das Sinn?

    
Andrew Keith 09.10.2009 00:50
quelle
0

Es kann sein, dass die Factory manchmal Subtypen des zurückgegebenen Typs generiert. Sie können dies nicht mit einem Konstruktor tun, sondern haben die Flexibilität mit einer Factory.

    
Frank Schwieterman 09.10.2009 00:59
quelle
0

Es macht auch mehr Sinn, das Factory-Muster zu verwenden, um Unterklassen zu verwenden, wie ChrisW illustriert, wenn Sie Polymorphismus durch Ihre Methoden implementieren möchten. Wenn

%Vor%

gibt dann verschiedene Unterklassen von Department zurück,

%Vor%

und

%Vor%

könnte zum Beispiel verschiedene Aktionen ausführen, was unordentlicher wäre, wenn Sie ein einzelnes Objekt über Konstruktorüberladung schließen ().

    
Ralph Lavelle 12.10.2009 02:20
quelle