[GO] Prototypmuster in Java

Einführung

Einführung in die Entwurfsmuster von [GoF](https://ja.wikipedia.org/wiki/Gang of for _ (Information Engineering)) ["Einführung in Entwurfsmuster, die in der erweiterten und überarbeiteten Java-Sprache gelernt wurden"]( https://www.amazon.co.jp/ Erweiterte und überarbeitete Ausgabe Einführung in Entwurfsmuster, die in der Java-Sprache gelernt wurden-Yuki-Hiroshi / dp / 4797327030 / ref = pd_lpo_sbs_14_t_0? _ Encoding = UTF8 & psc = 1 & refRID = 2ZE4GPYNN55JGDR5M Ich werde über zusammenfassen.

Prototypmuster

Was ist ein Prototyp?

Übersetzt ins Japanische bedeutet es "Prototyp". Das Muster **, das diese ** Prototypinstanz verwendet, um andere Klassen zu kopieren (zu duplizieren) und eine neue Instanz zu erstellen, wird als ** Prototypmuster ** bezeichnet. Normalerweise wird beim Erstellen einer Instanz new verwendet, aber im Prototype-Muster wird anstelle von new die in der Klasse java.lang.Object definierte Methode clone verwendet, die eine Oberklasse aller Klassen darstellt. Erstellen Sie eine Instanz.

Charakter

Das Prototypmuster wird von den Klassen verwendet, die im folgenden Klassendiagramm angezeigt werden. image.png

Abstrakte Klasse

Implementierungsklasse

Konkretes Beispiel

Als konkretes Beispiel werden wir anhand der folgenden Klasse erklären. image.png

Schnittstelle

Product.java


package framework;

import java.lang.Cloneable;

// 1. java.lang.Inherit Cloneable
public interface Product extends Cloneable {
	public abstract void display(String s);

//2.Deklarieren Sie die createClone-Methode
	public abstract Product createClone();
}

Die Punkte sind die folgenden zwei Punkte. ** 1. ** Erbt die Schnittstelle "java.lang.Cloneable", damit sie mit der Methode "clone" kopiert werden kann. ** 2. ** Deklarieren der createClone -Methode.

Ich werde eine ergänzende Erklärung geben. Die clone -Methode ist in der java.lang.Object -Klasse definiert, die eine Oberklasse aller Klassen ist. Um diese "Klon" -Methode auszuführen, muss die Quellklasse die "java.lang.Cloneable" -Schnittstelle implementieren. Wenn Sie die Schnittstelle "java.lang.Cloneable" nicht implementieren, erhalten Sie eine Ausnahme von "CloneNotSupportedException". In Bezug auf die Methode "createClone" handelt es sich um eine Methode zur Verwendung der Methode "clone". Die Implementierung erfolgt jedoch durch die Unterklassen "Surround" und "UnderLine".

Implementierungsklasse

Client.java


package framework;

import java.util.*;

public class Client {
	private HashMap<String, Product> stringName = new HashMap<>();

	// 1.Registrieren Sie sich bei HashMap
	public void register(String name, Product pro) {
		stringName.put(name, pro);
	}

	// 2.Verwenden Sie die createClone-Methode
	public Product create(String proname) {
		Product p = (Product) stringName.get(proname);
		return p.createClone();
	}
}

Die Client-Klasse ist eine Klasse zur Verwendung der Kopiermethode. Die Punkte sind die folgenden zwei Punkte. ** 1. ** Mit der Methode 'register` wird eine Instanz registriert, die die Produktschnittstelle in HashMap implementiert. ** 2. ** Sie verwenden die Methode "createClone ()" innerhalb der Methode "create".

Surround.java


import framework.*;

public class Surround implements Product {
	private char srchar;

	public Surround(char srchar) {
		this.srchar = srchar;
	}

	// 1.Implementierung der Anzeigemethode
	@Override
	public void display(String s) {
		int length = s.getBytes().length;
		for (int i = 0; i < length + 4; i++) {
			System.out.print(srchar);
		}
		System.out.println("");
		System.out.println(srchar + " " + s + " " + srchar);
		for (int i = 0; i < length + 4; i++) {
			System.out.print(srchar);
		}
		System.out.println("\n");
	}

	// 2.Implementierung der createClone-Methode
	@Override
	public Product createClone() {
		Product p = null;
		try {
			p = (Product) clone();
		} catch (CloneNotSupportedException e) {
			e.printStackTrace();
		}
		return p;
	}
}

Die Surround-Klasse ist eine Klasse zum Implementieren von Kopiermethoden. Die Punkte sind die folgenden zwei Punkte. ** 1. ** Das vom Konstruktor empfangene Zeichen wird verwendet, um die Zeichenfolge einzuschließen und anzuzeigen, die beim Aufrufen der Methode "display" empfangen wird. Die Methode "display" ist implementiert. ** 2. ** Implementierung der Methode createClone.

Ich werde eine ergänzende Erklärung zu 2 geben. Die Punkte sind ** 2 **. Der erste ist der ** Punkt, der in der ** try-catch-Anweisung enthalten ist. Die clone -Methode muss die java.lang.Cloneable -Schnittstelle implementieren, wie in der Produktschnittstelle beschrieben. Wenn es nicht implementiert ist, tritt eine Ausnahme von "CloneNotSupportedException" auf, sodass es in Anbetracht des Falls, in dem eine Ausnahme auftritt, in eine try-catch-Anweisung eingeschlossen wird. Das zweite ist, dass die "Klon" -Methode innerhalb der ** "createClone" -Methode ** aufgerufen wird. Sie können die Klonmethode nur von Ihrer eigenen Klasse (oder Unterklasse) aus aufrufen. Um die clone -Methode aus der Client-Klasse aufzurufen, muss der Aufruf daher über eine andere Methode wie die createClone -Methode erfolgen.

Underline.java


import framework.*;

public class Underline implements Product {
	private char ulchar;

	public Underline(char ulchar) {
		this.ulchar = ulchar;
	}

	// 1.Implementierung der Anzeigemethode
	@Override
	public void display(String s) {
		int length = s.getBytes().length;
		System.out.println("\"" + s + "\"");
		System.out.print(" ");
		for (int i = 0; i < length; i++) {
			System.out.print(ulchar);
		}
		System.out.println("\n");
	}

	// 2.Implementierung der createClone-Methode
	@Override
	public Product createClone() {
		Product p = null;
		try {
			p = (Product) clone();
		} catch (CloneNotSupportedException e) {
			e.printStackTrace();
		}
		return p;
	}
}

Die Klasse "Unterstreichen" ist eine Klasse zum Implementieren von Kopiermethoden wie die Klasse "Surround". Die Punkte sind die folgenden zwei Punkte. ** 1. ** Das vom Konstruktor empfangene Zeichen implementiert die Methode "display", die als Unterstreichung unter der Zeichenfolge angezeigt wird, die beim Aufruf der Methode "display" empfangen wird. ** 2. ** Implementierung der Methode createClone.

Die ergänzende Erklärung entspricht der Klasse "Surround" und wird daher weggelassen.

Ausführungsklasse

-** Hauptklasse **

Main.java


import framework.*;

public class Main {
	public static void main(String[] args) {
		//Vorbereitung
		Client manager = new Client();
		Underline ul1 = new Underline('-');
		Underline ul2 = new Underline('~');
		Surround sr1 = new Surround('#');
		Surround sr2 = new Surround('@');
		manager.register("underLine text1", ul1);
		manager.register("underLine text2", ul2);
		manager.register("surround text1", sr1);
		manager.register("surround text2", sr2);

		//Generieren
		Product p1 = manager.create("underLine text1");
		p1.display("Hello, world.");
		Product p2 = manager.create("underLine text2");
		p2.display("Hello, world.");
		Product p3 = manager.create("surround text1");
		p3.display("Hello, world.");
		Product p4 = manager.create("surround text2");
		p4.display("Hello, world.");
	}
}

Zur Vorbereitung wird die Methode "register" verwendet, um die Instanzen "Underline" und "Surround" zu registrieren. Bei der Erstellung rufen wir die Methode "create" auf, um eine Kopie der Instanz zu erstellen, und rufen die Methode "display" auf.

Ausführungsergebnis

Das Ergebnis der Ausführung von "Main.java" ist wie folgt. Sie können bestätigen, dass die angegebenen Zeichen unterstrichen oder eingeschlossen sind.

Ausführungsergebnis


"Hello, world."
 -------------

"Hello, world."
 ~~~~~~~~~~~~~ 

#################
# Hello, world. #
#################

@@@@@@@@@@@@@@@@@
@ Hello, world. @
@@@@@@@@@@@@@@@@@

** * Ergänzung: 08.11.2018 ** Ich habe links_2_3_4 gefragt, wie am Ende ein Leerzeichen in voller Breite hinzugefügt werden soll. Vielen Dank.

verdienen

Es gibt die folgenden drei Punkte. ** 1. ** Wenn mehrere Instanzen ähnlicher Klassen vorhanden sind, müssen die Klassen nicht getrennt werden, und die Verwaltung ist einfach. ** 2. ** Wenn es schwierig ist, eine Instanz aus einer Klasse zu erstellen, können Sie einfach eine Instanz erstellen. ** 3. ** Sie können das Framework von der zu erstellenden Instanz trennen.

Zusammenfassung

Sie haben das Prototypmuster zum Kopieren anderer Klassen und zum Erstellen neuer Instanzen mithilfe der Prototypinstanz kennengelernt. Der Beispielcode wird unten hochgeladen. Wenn Sie möchten, lesen Sie ihn bitte.

Darüber hinaus sind unten weitere Entwurfsmuster zusammengefasst. Bitte beziehen Sie sich auch auf diese.

Verweise

Recommended Posts

Prototypmuster in Java
Fassadenmuster in Java
Singleton-Muster in Java
Fliegengewichtsmuster in Java
Beobachtermuster in Java
Iteratormuster in Java
Dekorationsmuster in Java
Proxy-Muster in Java
Muster der Vorlagenmethode in Java
Muster der Verantwortungskette in Java
Singleton-Muster in Python
Besuchermuster in Python
Ich habe ein Designmuster in der Kotlin Prototype Edition geschrieben
Zusammenfassung der Prototypmuster der Einführung in Entwurfsmuster, die in Java gelernt wurden
Implementieren Sie einen tabellengesteuerten Test in Java
Signale in Java erkennen und verarbeiten.
Implementieren Sie das Singleton-Muster in Python
Implementierte Blasensortierung in Java (BubbleSort)
Grobe Zusammenfassung des GoF-Java-Entwurfsmusters
Überlappende reguläre Ausdrücke in Python und Java
Lernen Sie das Entwurfsmuster "Builder" mit Python
Lernen Sie das Designmuster "Flyweight" in Python
Lernen Sie das Entwurfsmuster "Observer" in Python
Lernen Sie das Entwurfsmuster "Memento" mit Python
Lernen Sie das Entwurfsmuster "Proxy" in Python
Express Python-Ertrag in JavaScript oder Java
Wenden Sie den Google Java Style-Formatierer mit IntelliJ an
Unterschiede zwischen Python- und Java-Syntax
Erhalten Sie E-Mails mithilfe der Google Mail-API in Java
Lernen Sie das Entwurfsmuster "Besucher" mit Python
Lernen Sie das Entwurfsmuster "Bridge" mit Python
Lernen Sie das Entwurfsmuster "Mediator" mit Python
Lernen Sie das Designmuster "Decorator" mit Python
Lernen Sie das Entwurfsmuster "Iterator" mit Python
Lernen Sie das Entwurfsmuster "Strategie" mit Python
Lernen Sie das Entwurfsmuster "Composite" mit Python
Lernen Sie das Entwurfsmuster "State" in Python
Lassen Sie uns das Bash-Skript in Java ausführen
Lernen Sie das Entwurfsmuster "Adapter" mit Python