Zusammenfassung
Designmuster sind eine Kunst. Wenn Sie diese Kunst wirklich verstehen, werden Sie feststellen, dass die Welt schöner wird.
Definition
Definieren Sie eine Schnittstelle zum Erstellen von Objekten und lassen Sie ihre Unterklassen entscheiden, welche Klasse instanziiert werden soll
Verwendungsszenarien
Jede Verwendung komplexer Objekte, die Sie verwenden können das Fabrikmuster überall
UML
1. Abstrakte Fabrik
Abstrakte Fabrik: Wir alle wissen, dass es im Allgemeinen nur eine Fabrik gibt Funktion, also Produktion. Beispielsweise stellt eine Geely-Automobilfabrik Geely-Autos her, ein iPhone-Hersteller stellt iPhones her usw.
Es lässt sich also auf einfache Weise zusammenfassen: create();
2 . Konkrete Autofabrik
Konkrete Autofabrik: implementiert eine abstrakte Fabrik mit tatsächlichen Prozessen und Methoden zur Herstellung von Autos usw.
Abstraktes Auto
Abstraktes Auto: Wir wissen im Allgemeinen, dass Autos fahren, Musik spielen, navigieren und wenden können. Dies sind die gemeinsamen Merkmale von Autos
4. Betonautos
Abstrakte Autos: Beton Auto realisiert das abstrakte Auto und hat alle seine Funktionen.
Das Obige ist eine einfache Einführung. Im Allgemeinen stellen bestimmte Autofabriken entsprechende Autos her stellt Audi-Autos her, Volkswagens Fabrik, die Volkswagen-Autos usw. herstellt.
Code-Demonstration
Wir haben die Beziehung zwischen ihnen oben klar verstanden, also verwenden Sie als Nächstes einfach Code, um unsere oben genannten Ideen zu demonstrieren und auszudrücken und Logik im Code:
(1) Abstrakte Autofabrik
package com.zengtao.demo.factory; /** * 抽象工厂 */ public abstract class CarFactory { public abstract <T extends Car> T createCar(Class<T> cla); }
(2) Spezifische Autofabrik
package com.zengtao.demo.factory; /** * 奥迪工厂 */ public class AudiFactory extends CarFactory { @SuppressWarnings("unchecked") @Override public <T extends Car> T createCar(Class<T> cla) { Car car = null; try { car = (Car) Class.forName(cla.getName()).newInstance(); } catch (Exception e) { e.printStackTrace(); } return (T) car; } }
(3) Definieren Sie abstraktes Auto
package com.zengtao.demo.factory; public abstract class Car { public abstract void drive(); public abstract void selfNagive(); public abstract void playMusic(); }
(4) Spezifisches Auto
(Audi q3)
package com.zengtao.demo.factory; public class AudiQ3Car extends AudiCar { @Override public void drive() { System.out.println("AudiQ3Car 已经制造成功"); System.out.println("AudiQ3Car drive"); } @Override public void selfNagive() { System.out.println("AudiQ3Car selfNagive"); } @Override public void playMusic() { System.out.println("AudiQ3Car playMusic"); System.out.println(""); } }
(Audi q5)
package com.zengtao.demo.factory; public class AudiQ5Car extends AudiCar { @Override public void drive() { System.out.println("AudiQ5Car 已经制造成功"); System.out.println("AudiQ5Car drive"); } @Override public void selfNagive() { System.out.println("AudiQ5Car selfNagive"); } @Override public void playMusic() { System.out.println("AudiQ5Car playMusic"); System.out.println(""); } }
(5) Anruf
package com.zengtao.demo; import com.zengtao.demo.factory.AudiFactory; import com.zengtao.demo.factory.AudiQ3Car; import com.zengtao.demo.factory.AudiQ5Car; public class Main { public static void main(String[] str) { // 创建工厂 AudiFactory audiFactory = new AudiFactory(); // 利用工厂制造q3车 AudiQ3Car audiQ3Car = audiFactory.createCar(AudiQ3Car.class); // 利用工厂制造q5车 AudiQ5Car audiQ5Car = audiFactory.createCar(AudiQ5Car.class); // 开始开车放音乐 audiQ3Car.drive(); audiQ3Car.playMusic(); audiQ5Car.drive(); audiQ5Car.playMusic(); } }
(6) Ergebnis
Das Obige verwendet das Fabrikmethodenmuster, um die Herstellung zu realisieren. Der einfache Prozess eines Autos
Das erste Punkt:
In der abstrakten Fabrik sehen wir die Methode createCar (Class cla). Warum definieren wir sie so? Verwenden Sie Reflektion, um ein bestimmtes Auto zu erstellen. Auf diese Weise müssen unsere verschiedenen Fahrzeugtypen nur korrespondieren Bedingungen, um sie zu produzieren. Es ist also von Vorteil, so zu schreiben: Audi hat q3, q5, a4, a6, a7, das gleiche wie a8 und andere Serien
Zweiter Punkt:
Wenn wir andere Autos wie BMW haben und auch BMW x1, 320, x5 usw. haben, können wir auch sehr einfach sein. Zur Implementierung müssen Sie nur die abstrakte Fabrik und dann das spezifische Auto implementieren Kann das abstrakte Auto implementieren. Die Erweiterung ist auch sehr praktisch
Zusammenfassung
Die abstrakte Fabrik ist fast da, das Fabrikmethodenmuster ist ein Vergleich. Es ist ein einfaches und gutes Entwurfsmuster
aber es hat auch Mängel. Zum Beispiel: Wenn es neue Arten von Autos gibt, müssen Sie nur abstrakte Fabriken und abstrakte Autos implementieren und zwei neue Klassen erstellen
Aber wenn es kein Auto, sondern ein Mobiltelefon ist Telefon, dann müssen Sie alles schreiben. Dadurch werden viele Klassen angezeigt. Ob das Factory-Methodenmuster verwendet werden soll oder nicht, hängt von den Anforderungen ab.
Hinweis: Sie sollten Designmuster nicht aus Designgründen anwenden. Natürlich wird auch häufig das Factory-Methodenmuster verwendet. In der onCreate-Methode von Activity laden und generieren wir beispielsweise auch die entsprechende Schnittstelle Basierend auf dem von uns definierten XML-Layout usw. usw.
Das Obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, dass er für das Lernen aller hilfreich ist, und ich hoffe auch, dass jeder ihn unterstützt die chinesische PHP-Website.
Weitere Artikel zum Factory-Methodenmuster von Java-Designmustern finden Sie auf der chinesischen PHP-Website!