[JAVA] Factory Method Muster

Factory Method Muster

Muster der Vorlagenmethode erstellt ein Verarbeitungsframework auf der Oberklassenseite und konkretisiert die spezifische Verarbeitung auf der Unterklassenseite. Das Factory-Methodenmuster ist eine Anwendung dieses Musters auf die Instanziierungsszene.

Die Rolle des Produkts

Eine abstrakte Klasse, die die Schnittstelle definiert, die eine von diesem Muster generierte Instanz haben sollte. Der spezifische Inhalt wird durch die Rolle des Betonprodukts bestimmt.

package factoryMethod;

public abstract class Product {
	public abstract void use();
}

Die Rolle des Schöpfers

Eine abstrakte Klasse, die eine Produktrolle erstellt. Der spezifische Inhalt wird von Contrete Creator festgelegt. Die Erstellerrolle weiß nichts über die Rolle des konkreten Produkts, die sie tatsächlich erstellt. Die Ersteller-Rolle weiß nur, dass das Produkt erstellt wird, wenn Sie die Produktrolle und die Instanziierungsmethode aufrufen. Durch Ersetzen der tatsächlichen Instanziierung durch new durch den Methodenaufruf zur Instanziierung wird die Oberklasse durch den konkreten Klassennamen von der Bindung befreit.

package factoryMethod;

public abstract class Factory {
	public final Product create(String owner) {
		Product p = createProduct(owner);
		registerProduct(p);
		return p;
	}

	protected abstract Product createProduct(String owner);
	protected abstract void registerProduct(Product product);

}

Die Rolle des Betonprodukts

Bestimmte Produkte bestimmen.

package factoryMethod;

public class IdCard extends Product {
	private String owner;
	 public IdCard(String owner) {
		 System.out.println(owner + "Eine Karte machen");
		 this.owner = owner;
	}

	 @Override
	 public void use() {
		 System.out.println(owner + "Verwenden Sie die Karte");
	 }

	 public String getOwner() {
		 return owner;
	 }
}

Die Rolle des konkreten Schöpfers

Definieren Sie eine Klasse, um ein bestimmtes Produkt herzustellen.

package factoryMethod;

import java.util.ArrayList;
import java.util.List;

public class IdCardFactory extends Factory {
	private List<String> owners = new ArrayList<>();

	@Override
	protected Product createProduct(String owner) {
		return new IdCard(owner);
	}

	@Override
	protected void registerProduct(Product product) {
		owners.add(((IdCard)product).getOwner());
	}

	public List<String> getOwners() {
		return owners;
	}
}

Anrufer

package factoryMethod;

public class Main {

	public static void main(String[] args) {
		Factory factory = new IdCardFactory();
		Product card1 = factory.create("Tanaka");
		Product card2 = factory.create("Suzuki");
		Product card3 = factory.create("Sato");
		card1.use();
		card2.use();
		card3.use();

	}
}

//Ausführungsergebnis
//Machen Sie eine Tanaka-Karte
//Machen Sie eine Suzuki-Karte
//Mach Satos Karte
//Ich werde Tanakas Karte benutzen
//Ich werde Suzukis Karte benutzen
//Ich werde Satos Karte benutzen

Der obigen IdCard-Klasse wurde eine Seriennummer hinzugefügt, und die IdCardFactory-Klasse wurde so geändert, dass eine Entsprechungstabelle zwischen der Seriennummer und dem Eigentümer vorhanden war.

package factoryMethod;

public class IdCard extends Product {
	private String owner;
	private int serial;
	 public IdCard(String owner, int serial) {
		 System.out.println(owner + "(" + serial + ")Eine Karte machen");
		 this.owner = owner;
		 this.serial = serial;
	}

	 @Override
	 public void use() {
		 System.out.println(owner + "(" + serial + ")Verwenden Sie die Karte");
	 }

	 public String getOwner() {
		 return owner;
	 }

	 public int getSerial() {
		 return serial;
	 }
}
package factoryMethod;

import java.util.HashMap;

public class IdCardFactory extends Factory {
	private HashMap<Integer, String> database = new HashMap<>();
	private int serial = 1;


	@Override
	protected synchronized Product createProduct(String owner) {
		return new IdCard(owner, serial++);
	}

	@Override
	protected void registerProduct(Product product) {
		IdCard card = (IdCard)product;
		database.put(card.getSerial(), card.getOwner());
	}

	public HashMap<Integer, String> getDatabase() {
		return database;
	}
}
package factoryMethod;

public class Main {

	public static void main(String[] args) {
		Factory factory = new IdCardFactory();
		Product card1 = factory.create("Tanaka");
		Product card2 = factory.create("Suzuki");
		Product card3 = factory.create("Sato");
		card1.use();
		card2.use();
		card3.use();

	}

}
//Ausführungsergebnis
//Tanaka(1)Eine Karte machen
//Suzuki(2)Eine Karte machen
//Sato(3)Eine Karte machen
//Tanaka(1)Verwenden Sie die Karte
//Suzuki(2)Verwenden Sie die Karte
//Sato(3)Verwenden Sie die Karte


Ich konnte Änderungen vornehmen, ohne die Produktklasse, die Factory-Klasse und die Hauptklasse zu ändern.

Recommended Posts

Factory Method Pattern
Factory Method Muster
Entwurfsmuster ~ Fabrikmethode ~
abstraktes Fabrikmuster
Abstraktes Fabrikmuster
Muster der Vorlagenmethode
Muster der Vorlagenmethode
Java-Anfänger-Entwurfsmuster (Factory-Methodenmuster)
Entwurfsmuster ~ Abstrakte Fabrik ~
Entwurfsmuster ~ Vorlagenmethode ~
Entwurfsmuster nach Ruby Template-Methode Musternotiz
Einführung in Entwurfsmuster (Factory-Methode)
C # gekautes Designmuster: TemplateMethod
Prototypmuster
Erinnerungsmuster
Was für eine Strategiemusterfabrik, kein Staat
Vermittlermuster
Iteratormuster
Zusammengesetztes Muster
Java-Methode
to_i Methode
Beobachtermuster
Builder-Muster
Brückenmuster
Methode getRequestDispatcher ()
Befehlsmuster
Zusammenführungsmethode
Builder-Muster
Strategiemuster
Iteratormuster
Besuchermuster
Adaptermuster
Methode einschließen
Proxy-Muster
Strategiemuster
Zusammengesetztes Muster
Abstrakte Methode
Listenmethode
Singleton-Muster
setzt Methode
Java-Methode
Klassenmethode
Fassadenmuster
getParameter-Methode
[Java] -Methode
Dekorationsmuster
Fliegengewichtsmuster
Dekorateur Muster
Vermittlermuster
private Methode
Fassadenmuster
Besuchermuster
Schienenmethode
Brückenmuster
[Java] -Methode