Fabrikmusterdefinition: Bietet eine Schnittstelle zum Erstellen von Objekten.
Warum den Werksmodus verwenden?
Das Fabrikmodell ist das am häufigsten verwendete Modell, das wir verwenden.
Warum wird das Fabrikmodell so häufig verwendet? Da das Fabrikmuster dem Erstellen neuer Instanzobjekte entspricht, müssen wir häufig Instanzobjekte basierend auf Klassenklassen generieren. Müssen Sie vorsichtiger sein.
Nehmen wir die Beispielklasse als Beispiel. Wenn wir ein Instanzobjekt von Sample erstellen möchten:
Die Codekopie lautet wie folgt:
Probe Probe = new sample ();
Die Realität ist jedoch, dass wir normalerweise einige Initialisierungsarbeiten beim Erstellen von Beispielinstanzen erledigen, z. B. Abfragedatenbanken usw.
Zunächst denken wir, dass wir den Konstruktor von Sample verwenden können, damit die Instanz generiert und geschrieben wird wie bei:
Die Codekopie lautet wie folgt:
Probe Probe = neue Probe (Parameter);
Wenn die Initialisierungsarbeit beim Erstellen einer Beispielinstanz jedoch nicht so einfach ist wie die Zuordnung, kann es sich um einen langen Code handeln.
Warum ist der Code hässlich? Die Methode ist gleichbedeutend mit einer Menge Eiern in einem Korb, was auch dem objektorientierten Prinzip von Java entspricht. Langer Code -Versand in jedes Segment, und das Segment ist erneut "eingekapselt" (Reduzierung der Kopplungsverbindung zwischen den Segmenten), damit die Risiken diversifiziert werden. Keine Dinge mehr, die jedes Segment beeinflussen.
In diesem Beispiel müssen wir zunächst die Arbeiten der Erstellung einer Instanz aus der Arbeit der Verwendung einer Instanz trennen, dh die große Menge an Initialisierungsarbeiten, die erforderlich ist, um eine Instanz aus dem Konstruktor der Probe zu erstellen.
Zu diesem Zeitpunkt benötigen wir das Werksfabrikmuster, um Objekte zu generieren, und wir können das einfache neue Beispiel (Parameter) nicht mehr verwenden. Wenn die Probe eine Vererbung wie MySample entspricht, müssen wir die Stichprobe nach der interface-orientierten Programmierung in eine Schnittstelle abstrakt werden. Jetzt ist Probe eine Schnittstelle mit zwei Unterklassen MySample und Hissample. Wenn wir sie wie folgt instanziieren wollen:
Die Codekopie lautet wie folgt:
Beispiel mySample = new mySample ();
Wenn das Projekt vertieft ist, kann die Probe "viele Söhne rausbringen", sodass wir diese Söhne nacheinander instanziieren müssen ist in traditionellen Programmen unvermeidbar.
Wenn Sie das Werksmodell von Anfang an bewusst verwenden, sind diese Probleme verschwunden.
Fabrikmethode
Sie erstellen eine Fabrik, die sich auf die Herstellung von Beispielinstanzen spezialisiert hat:
Die Codekopie lautet wie folgt:
öffentliche Klassenfabrik {
public static sample creator (int was) {
// GETCLASS Generieren Sie eine Probe generieren. Im Allgemeinen kann dynamische Klassenbelastung zum Laden von Klassen verwendet werden.
if (was == 1)
Rückgabe neuer Samplea ();
sonst wenn (was == 2)
Neue Probe zurückgeben ();
}
}
Wenn Sie dann in Ihrem Programm Beispiel instanziieren möchten, verwenden Sie den Copy -Code wie folgt:
Probenprobenplea = Fabrik.Creator (1);
Auf diese Weise ist die spezifische Unterklasse der Stichprobe nicht in den gesamten Prozess beteiligt. Je einfacher es ist, Fehler zu machen. Jeder, der spezifische Arbeiten geleistet hat, hat ein tiefes Verständnis dafür. Es scheint, dass wir auch die Grundsätze des Lebens aus der Programmierung verstehen können?
Verwenden Sie die Fabrikmethoden, um auf mehrere Rollen zu achten. Um die Produktprobe zu erzeugen, wie in der folgenden Abbildung gezeigt.
Um komplizierter zu sein, soll die Fabrikklasse erweitert werden, die auch ihre Implementierungsklasse konkretfaktorisch erbt.
Zusammenfassung Fabrik
Das Werksmodell umfasst: Fabrikmethode und abstrakte Fabrik.
Der Unterschied zwischen diesen beiden Mustern liegt in der Komplexität der Erstellung von Objekten. Wenn unsere Methode zum Erstellen eines Objekts kompliziert wird, wie bei der obigen Fabrikmethode, wird ein Objektprobe erstellt, wenn wir ein neues Produkt -Schnittstellen -Sample2 haben.
Angenommen hier: Probe hat zwei Betonklassen Samplea und Samleb, und Sample2 hat auch zwei Betonklassen Sample2A und SampleB2. Verschiedene Teile -Unterklassen -Implementierung, folgt Folgendes, um die Fabrik im obigen Beispiel in eine abstrakte Fabrik zu erweitern:
Die Codekopie lautet wie folgt:
öffentliche abstrakte Klassenfabrik {
public abstract probs creator ();
public abstract sample2 Creator (String -Name);
}
öffentliche Klasse SimpleFactory erweitert Fabrik {
public sample Creator () {......... Neues Stichprobenplea} zurückgeben}
public Sample2 Creator (String -Name) {......... Neues Beispiel2A} zurückgeben
}
öffentliche Klasse Bombfactory erweitert Fabrik {
public sample Creator () {...... Neues Beispiel zurückgeben}
public Sample2 Creator (String -Name) {...... Neues Beispiel2b} zurückgeben
}
In den oben genannten Fabriken werden jeweils eine Reihe von Proben und Proben produziert.
Es gibt einen weiteren wichtigen Punkt in der abstrakten Fabrik, da es einen bestimmten Zusammenhang zwischen den Methoden und Proben in SimpleFactory gibt, sodass diese beiden Methoden in eine Klasse gebündelt werden müssen Der Prozess ist beispielsweise einheitlich: Der Herstellungsprozess ist relativ einfach, daher ist der Name einfach.
In praktischen Anwendungen wird die Werksmethode häufiger verwendet und mit dynamischen Klassenladern kombiniert.
Beispiele für Java -Fabrikmodell
Nehmen wir Jives ForumFactory als Beispiel.
Die Codekopie lautet wie folgt:
public abstract Class ForumFactory {
private statische Objekt initlock = new Object ();
public static ForumFactory GetInstance (Autorisierung Autorisierung) {
// Wenn keine gültige Autorisierung übergeben wird, geben Sie NULL zurück.
if (Autorisierung == null) {return null;
// Folgendes verwendet den Singleton Singleton -Modus
if (factory == null) {
synchronisiert (initlock) {
if (factory == null) {......
versuchen {
// Dynamischer Nachdruck
Klasse c = class.Forname (className);
factory = (ForumFactory) C.Newinstance ();
} catch (Ausnahme E) {return null;
}
}
}
// Rückgabeproxy.
Neue ForumFactoryProxy zurückgeben (Autorisierung, Fabrik, factory.getPermissions (Autorisierung));
}
// Die Methode zum Erstellen von Forum wird durch eine Unterklasse erben ForumFactory abgeschlossen.
öffentliches Abstract Forum createForum (String -Name, String Beschreibung)
wirft nicht autorisierte Ausnahme, Forumalreadysexistsexception;
....
}
Da Jive nun Forum -Posts und andere Inhaltsdaten über das Datenbanksystem speichert, bietet dieses Fabrikmethode ForumFactory eine dynamische Schnittstelle an:
Die Codekopie lautet wie folgt:
private static String className = "com.jivesoftware.forum.database.dbforumFactory";
Sie können die Methode verwenden, die Sie entwickelt haben, um Forum anstelle von com.jivesoftware.forum.database.dbforumFactory zu erstellen.
Im obigen Code gibt es drei Modi. Zugriffsforum: Eine, wenn Sie ein registrierter Benutzer und ein Gast sind, sind die entsprechenden Berechtigungen unterschiedlich, und diese Berechtigung wird durch das gesamte System ausgeführt.
Schauen Sie sich Catalogdaofactory im Java Pet Store an:
Die Codekopie lautet wie folgt:
öffentliche Klasse Catalogdaofactory {
/**
* Diese Methode entwickelt eine spezielle Unterklasse, um das DAO -Muster zu implementieren.
* Die spezifische Unterklasse -Definition befindet sich im J2EE -Bereitstellungsdeskriptor.
*/
public static catalogdao getdao () löst Catalogdaosysexception {aus
Catalogdao catdao = null;
versuchen {
InitialContext ic = new initialContext ();
// Dynamisches Laden von Catalog_dao_class
// Sie können Ihre eigene catalog_dao_class definieren, damit Sie nicht zu viel Code ändern müssen
// Füllen Sie die riesigen Systemänderungen ab.
String className = (string) ic.lookup (jndinames.catalog_dao_class);
Catdao = (Catalogdao) class.forname (className) .Newinstance ();
} catch (namingException ne) {
Neue Katalogdaosysexception ("Catalogdaofactory.getDao: NamingException beim Erhalten von Dao Type: /n" + ne.getMessage ());
} catch (Ausnahme se) {
Neue Katalogdaosysexception ("Catalogdaofactory.getDao: Ausnahme beim DAO Typ: /n" + se.getMessage ());
}
Catdao zurückgeben;
}
}
Catalogdaofactory ist eine typische Fabrikmethode. .
Es ist ersichtlich, dass die Fabrikmethode einen sehr flexiblen und leistungsstarken dynamischen Expansionsmechanismus für die Systemstruktur liefert. ist möglich, die Systemfunktionen in einer Transformation zu ändern.