[JAVA] Einführung in Entwurfsmuster Prototyp

Einführung in Entwurfsmuster Prototyp

Überblick

Was ist ein Prototypmuster?

--Prototyp: Erstellen Sie eine Instanz aus dem "Prototyp". Nicht aus der Klasse.

Miso

Aktionen wie das Zeichnen eines Quadrats sind üblich, aber zu dieser Zeit

-Quadrat umgeben von "/" -Quadrat umgeben von "*"

Wenn es drei Vorlagen gibt, die so unterteilt sind, macht es keinen Sinn, jede in einer anderen Klasse zu erstellen.

Klassifizieren Sie nur die Form der zu zeichnenden Figur und ordnen Sie die Linientypen dem Client als dieselbe Klasse zu.

Wenn Sie dasselbe "Zeichnen eines Dreiecks mit der Linie" / "" wiederholen, können Sie eine neue Instanz aus der als Vorlage registrierten Prototype-Instanz klonen und verwenden.

Konzeptdiagramm

concept.cld.jpg

Implementierungszeichnung

Charakter

--framework Paket --Produktschnittstelle: Inherit Cloneable --Manager-Klasse: Speichern Sie Cloneable in Map und erstellen Sie einen Klon --entity-Paket --Main: Einstiegspunkt --MessageBox-Klasse: Implementiertes Produkt. Zeichnen Sie ein Rechteck / ConcreteProduct --UnderLinePen-Klasse: Implementiertes Produkt. Unterstreichen / Betonprodukt

Implementierungsquelle

Product

Product


package prototype.product.frameworks;

public interface Product extends Cloneable{
	public abstract void use(String s);
	public abstract Product createClone();

}

Manager

package prototype.product.frameworks;

import java.util.HashMap;

public class Manager {

	private HashMap<String, Cloneable> showcase = new HashMap<>();
	public void register(String name, Cloneable prototype) {
		showcase.put(name, prototype);
	}

	public Product create(String protoname) {
		Product p = (Product)showcase.get(protoname);
		return p.createClone();
	}

}

MessageBox

package prototype.product.entity;

import prototype.product.frameworks.Product;

public class MessageBox implements Product {
	private char decoChar;

	public MessageBox(char decoChar) {
		this.decoChar = decoChar;
	}

	@Override
	public void use(String s ) {
		int length = s.getBytes().length;
		for (int i = 0; i < length+4; i++) {
			System.out.print(decoChar);
		}
		System.out.println("");
		System.out.println(decoChar+" "+s + " " +decoChar);
		for (int i = 0; i <length+4; i++) {
			System.out.print(decoChar);
		}
		System.out.println("");
	}

	@Override
	public Product createClone() {
		Product product = null;
		try {
			product= (Product)clone();
		}catch (CloneNotSupportedException e) {
			e.printStackTrace();
		}
		return product;
	}
}

UnderLinePen

package prototype.product.entity;

import prototype.product.frameworks.Product;

public class UnderLinePen implements Product{
	private char ulChar;
	public UnderLinePen(char ulChar) {
		this.ulChar = ulChar;
	}
	@Override
	public void use(String s) {
		int length = s.getBytes().length;
		System.out.println("¥ "+s+" ¥");
		for (int i = 0; i < length+4; i++) {
			System.out.print(ulChar);
		}
		System.out.println("");
	}

	@Override
	public Product createClone() {
		Product product = null;
		try {
			product = (Product) clone();
		}catch (CloneNotSupportedException e) {
			e.printStackTrace();
		}
		return product;
	}

}

Main

package prototype.product.entity;

import prototype.product.frameworks.Manager;
import prototype.product.frameworks.Product;

public class Main {
	public static void main(String[] args) {
		Manager manager = new Manager(); 
		UnderLinePen linePen = new UnderLinePen('x'); //1
		MessageBox mbox = new MessageBox('*'); //1 
		MessageBox sbox = new MessageBox('/'); //1
		manager.register("Hervorgehobene Nachricht", linePen);// 2
		manager.register("Warnbox",mbox); //2
		manager.register("Diagonale Box", sbox);  //2

//Generieren
		Product p1 = manager.create("Hervorgehobene Nachricht");//3
		p1.use("Hello world");   //4
		Product p2 = manager.create("Warnbox"); //3
		p2.use("Hello world");   //4
		Product p3 = manager.create("Diagonale Box"); //3
		p3.use("Hello world");   //4
	}
}

Ausführungsergebnis

¥ Hello world ¥
xxxxxxxxxxxxxxx
***************
* Hello world *
***************
///////////////
/ Hello world /
///////////////

Interpretation

  1. Legen Sie die Zeichen fest, die auf dem Betonprodukt gezeichnet werden sollen
  2. Registrieren Sie konkrete Produkte in HashMap of Manager
  3. Erstellen Sie einen Klon mit Manager.create → Product.createClone gibt einen eigenen Klon zurück
  4. Zeichnen Sie mit Product.use

Implementierungsklassendiagramm

classes.cld.jpg

--Produkt ist die Rolle des Prototyps --MessageBox und UnderLinePen spielen die Rolle des Concrete Prototype --Manager ist die Rolle des Kunden

Zitat

Erweiterte und überarbeitete Ausgabe Einführung in Entwurfsmuster, die in Java gelernt wurden|Hiroshi Yuki|Computer / IT|Kindle Store| Amazon

[6 . Prototypmuster \ | TECHSCORE ](https://www.techscore.com/tech/DesignPattern/Prototype.html/)

Recommended Posts

Einführung in Entwurfsmuster Prototyp
Einführung in Entwurfsmuster (Einführung)
Einführung in Entwurfsmuster (Builder)
Einführung in Entwurfsmuster (Composite)
Einführung in Designmuster (Fliegengewicht)
Einführung in Entwurfsmuster (Iterator)
Einführung in Entwurfsmuster (Strategie)
Einführung in Design Patterns (Abstract Factory)
Wichtiges Entwurfsmuster zur Verbesserung der Wartbarkeit
Einführung in Ruby 2
Java-Entwurfsmuster
Einführung in web3j
Einführung in Micronaut 1 ~ Einführung ~
[Java] Einführung in Java
Einführung in die Migration
Entwurfsmuster ~ Prototyp ~
Einführung in Java
Einführung in Doma
Einführung in JAR-Dateien
Einführung in Ratpack (8) -Session
Einführung in die Bitarithmetik
Einführung in Ratpack (6) --Promise
Einführung in Ratpack (9) - Thymeleaf
Einführung in PlayFramework 2.7 ① Übersicht
Einführung in das Android-Layout
Einführung in die praktische Programmierung
Einführung in den Befehl javadoc
Einführung in den Befehl jar
Einführung in Ratpack (2) -Architektur
Einführung in den Lambda-Stil
Einführung in den Java-Befehl
Einführung in die Keycloak-Entwicklung
Studieren Sie GoF-Entwurfsmuster
Einführung in den Befehl javac
Ich las Hiroshi Yuki "Einführung in Designmuster, die in Java gelernt wurden" (SB Creative)
Einführung in die Android App-Entwicklung
Einführung in Ratpack (5) --Json & Registry
Einführung in Metabase ~ Umgebungskonstruktion ~
(Punktinstallation) Einführung in Java8_Impression
Einführung in Micronaut 2 ~ Unit Test ~
Einführung in JUnit (Studiennotiz)
Einführung in Spring Boot ~ ~ DI ~
[Java] Einführung in den Lambda-Ausdruck
Einführung in Spring Boot ② ~ AOP ~
Einführung in Apache Beam (2) ~ ParDo ~
Einführung in die EHRbase 2-REST-API
[Java] Einführung in die Stream-API
Einführung in Spring Boot Teil 1
Einführung in Ratpack (1) - Was ist Ratpack?
Warum Designmuster benötigt werden
[Java] Zusammenfassung der Entwurfsmuster