In diesem Artikel werden hauptsächlich relevante Informationen zu Beispielen für statische Java-Factory-Methoden vorgestellt. Ich hoffe, dass jeder, der sie benötigt, durch diesen Artikel auf
Java-Static zurückgreifen kann Factory-Methode Detaillierte Erläuterung von Instanzen
Was ist eine statische Factory-Methode?
Für eine Klasse, damit Benutzer eine Instanz von erhalten können selbst, der am häufigsten verwendete. Der beste Weg ist die Bereitstellung eines öffentlichen Konstruktors.
Was wir hier natürlich vorstellen möchten, ist eine andere methodenstatische Factory-Methode, eine statische Methode, die eine Instanz einer Klasse zurückgibt.
Zum Beispiel eine boolesche Methode, die den Basistyp boolean in eine gekapselte Klasse umwandelt, valueOf:
public static Boolean valueOf(boolean b) { return (b ? TRUE : FALSE); }
Warum sollten wir verwenden it? Statische Factory-Methode
Warum verwenden wir also statische Factory-Methoden anstelle von Konstruktoren?
Da die statische Fabrikmethode die folgenden drei Merkmale aufweist: Umweltfreundlichkeit und mehrere untergeordnete Elemente, lassen Sie uns im Folgenden auf jedes einzelne eingehen.
> Benannte statische Factory-Methoden haben Namen
Für Konstruktoren kann es je nach Eingabeparametern mehrere Konstruktoren geben Diese Konstruktoren sind alle gleich und Benutzer werden beim Aufruf verwirrt sein, welcher aufgerufen werden soll.
Nachdem Sie die statische Factory-Methode verwendet haben, können Sie der Methode je nach Funktion unterschiedliche Namen geben. Solange der Name gut gewählt ist, wissen Benutzer, was der Methodenname bedeutet, wenn sie ihn sehen. Zu wissen, welche Methode jederzeit aufgerufen werden sollte, verbessert die Lesbarkeit des Codes erheblich.
> Umweltfreundlich Sie müssen nicht jedes Mal ein neues Objekt erstellen, wenn Sie es aufrufen
Durch die Verwendung eines Konstruktors wird jedes Mal ein neues Objekt generiert .
Statische Factory-Methoden können wiederholt vorab erstellte Objekte zurückgeben.
Der obige Boolesche Wert ist ein sehr gutes Beispiel. Sowohl TRUE- als auch FALSE-Variablen sind unveränderliche Endobjekte, die sie einfach zurückgeben müssen über die Änderung.
Das Folgende ist der Initialisierungscode für die beiden Variablen TRUE und FALSE:
public final class Boolean implements java.io.Serializable, Comparable<Boolean> { /** * The {@code Boolean} object corresponding to the primitive * value {@code true}. */ public static final Boolean TRUE = new Boolean(true); /** * The {@code Boolean} object corresponding to the primitive * value {@code false}. */ public static final Boolean FALSE = new Boolean(false); ... }
> Kinder können ein Objekt eines beliebigen Untertyps des ursprünglichen Rückgabetyps zurückgeben
Mit einem Konstruktor können Sie nur ein Objekt eines Typs zurückgeben, mit einer statischen Factory-Methode können Sie das Original zurückgeben Gibt den Typ nach Bedarf zurück. Ein Objekt eines beliebigen Untertyps des Typs.
Nehmen Sie als Beispiel die Noneof-Methode von EnumSet:
/** * Creates an empty enum set with the specified element type. * * @param elementType the class object of the element type for this enum * set * @throws NullPointerException if <tt>elementType</tt> is null */ public static <E extends Enum<E>> EnumSet<E> noneOf(Class<E> elementType) { Enum[] universe = getUniverse(elementType); if (universe == null) throw new ClassCastException(elementType + " not an enum"); if (universe.length <= 64) return new RegularEnumSet<>(elementType, universe); else return new JumboEnumSet<>(elementType, universe); }
Bei dieser Methode wird aus Leistungsgründen der spezifische zurückgegebene Typ durch die Aufzählung bestimmt Der Typ wird durch die Zahl bestimmt. Wenn er 64 überschreitet, wird JumboEnumSet zurückgegeben, andernfalls wird RegularEnumSet zurückgegeben. Diese beiden Typen sind für den Benutzer nicht sichtbar. Der Benutzer muss nur wissen, dass es sich um ein EnumSet handelt.
Das liegt genau daran, dass statische Factory-Methoden größere Vorteile haben als Konstruktoren. Wenn wir eine Klasse erstellen, sollte unsere erste Reaktion nicht darin bestehen, einen öffentlichen Konstruktor bereitzustellen, und wir sollten statischen Factory-Methoden Vorrang einräumen.
Gemeinsame Namen statischer Factory-Methoden
Hier sind einige konventionelle Namen für statische Factory-Methoden:
valueOf/ Of—— Bei der Typkonvertierung hat die zurückgegebene Instanz denselben Wert wie der Eingabeparameter, z. B. Boolean.valueOf(), EnumSet.valueOf()
getInstance——Gibt eine vorab erstellte Instanz zurück
newInstance——Gibt eine neue Instanz zurück
Ist die statische Factory-Methode nicht das Factory-Muster?
An diesem Punkt denken viele Leute vielleicht, dass dies das Fabrikmodell ist? Antwort: Nicht ganz dasselbe.
Die in diesem Artikel besprochene statische Factory-Methode ist wie das Factory-Muster eine Methode, die den Konstruktor ersetzt, und beide haben die drei oben genannten Vorteile: Benennung, Umweltschutz und mehrere untergeordnete Elemente.
Die Implementierungsmethoden und Nutzungsszenarien der beiden sind jedoch unterschiedlich.
Intuitiv gesehen erfordert das Factory-Muster, über das wir sprechen, normalerweise eine xxxFactory-Klasse, in der die Factory-Methode definiert ist, und die in diesem Artikel besprochene statische Factory
Methode benötigen Sie nur eine Klasse, und die Klasse selbst stellt eine Factory-Methode zum Erstellen von Objekten bereit.
Zweitens: Wenn eine Klasse während des Entwurfs eine statische Factory-Methode bereitstellt, ist es dann immer noch notwendig, das Factory-Muster zu verwenden?
Ja, keine Notwendigkeit.
Mit anderen Worten, wir müssen das Factory-Muster nur verwenden, wenn eine Klasse keine statische Factory-Methode bereitstellt.
Denken Sie darüber nach: Wenn Apple über eine leistungsstarke Teilefabrik verfügt, braucht es dann noch Foxconn?
Zusammenfassung
Die statische Fabrikmethode hat drei große Vorteile: Sie ist umweltfreundlich und hat mehrere Kinder.
Wenn eine Klasse eine statische Factory-Methode bereitstellt, besteht keine Notwendigkeit, das Factory-Muster für diese Klasse zu berücksichtigen.
Wenn wir eine Klasse erstellen, sollte unsere erste Reaktion nicht darin bestehen, einen öffentlichen Konstruktor bereitzustellen, sondern statischen Factory-Methoden Vorrang einzuräumen.
Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung der Verwendung statischer Factory-Methoden in Java. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!