Guten Tag,Verwendung von Enum als Factory vs statische Fabrik Methode
Ich habe meine Objekt-Erstellung in eine Fabrik extrahiert.
Die Standardmethode im Projekt ist die Verwendung der statischen Fabrikmethode.
public final class CustomerFactory {
private CustomerFactory(){}
public static Customer valueOf(Detail detail) {
Customer customer = new Customer();
String name = detail.getName();
customer.setName(name);
String lastname = detail.getLastname();
customer.setLastname(lastname);
customer.setFullname(name + " " + lastname);
Date age = detail.getAge();
customer.setAge(age);
return customer;
}
}
Von Blick auf den Code, kann ich der Konstruktor ist privat sehen und die Klasse ist endgültig. Die Klasse kann nicht das heißt new
oder extends
instanziiert oder erweitert werden, beschloss ich, eine Enum-Fabrik zu machen, die das gleiche tut. Warum? Man kann es nicht erweitern, keine Notwendigkeit, auf Klassenebene endgültig zu sein und keinen privaten Konstruktor zu haben.
public enum CustomerFactory {
INSTANCE;
public Customer from(Detail detail) {
Customer customer = new Customer();
String name = detail.getName();
customer.setName(name);
String lastname = detail.getLastname();
customer.setLastname(lastname);
customer.setFullname(name + " " + lastname);
Date age = detail.getAge();
customer.setAge(age);
return customer;
}
}
von einem Peer Bei der Überprüfung wurde beschlossen, dass es wieder in dem ursprünglichen gehen sollte, weil es die falsche Verwendung eines enum
und auch Singletonmuster ist.
Für mich gibt es keinen Unterschied zwischen den beiden Implementierungen ist, würde ich eher das wählen, die sauberer, dh keine Notwendigkeit, zusätzliche Zugriffsmodifikatoren
Ist das unter einen Missbrauch eines Enum codieren, da es nur dazu bestimmt ist, für Konstanten verwendet werden?
Ich habe ein wenig Forschung vor der Implementierung, fand die stackoverflow Frage: http://stackoverflow.com/questions/23721115/singleton-pattern-using-enum-version – Rentius2407
@ Rentius2407 Ja, wir verwenden normalerweise Enum für Singleton Muster. In Ihrer Frage haben Sie gesagt, dass Sie enum für das Fabrikmuster verwenden, nicht für das Singleton-Muster. Das Factory-Muster erstellt bei jedem Factory-Methodenaufruf verschiedene Objs, da das Aufzählungsmuster immer dasselbe Obj erhält. – kissrain