Heim  >  Artikel  >  Java  >  Java Design Pattern Factory-Methodenmuster

Java Design Pattern Factory-Methodenmuster

高洛峰
高洛峰Original
2017-01-19 16:16:051369Durchsuche

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

Java Design Pattern Factory-Methodenmuster

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

Java Design Pattern Factory-Methodenmuster

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn