[JAVA] Entwurfsmuster ~ Prototyp ~

1. Zuallererst

Hier ist eine Zusammenfassung des ** Prototypmusters ** im GoF-Entwurfsmuster.

2. Was ist das Prototypmuster?

3. Beispielklassendiagramm

Prototype.PNG

4. Beispielprogramm

Es ist ein Programm, das die eingegebene Zeichenfolge unterstreicht oder einschließt.

4-1. Produktschnittstelle

Eine Schnittstelle, die Replikationsmethoden definiert. Es erbt die klonbare Schnittstelle von Java.

Product.java


package framework;
import java.lang.Cloneable;

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

4-2. Manager-Klasse

Diese Klasse wird verwendet, um die Erstellung von Produkten anzuweisen und zu verwalten.

Manager.java


package framework;
import java.util.HashMap;

public class Manager {

	private HashMap showcase = new HashMap();

	public void register(String name, Product proto) {
        showcase.put(name, proto);
    }

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

4-3. UnderlinePen-Klasse

Eine Klasse, die die Produktschnittstelle implementiert. Diese Klasse ist eine Klasse, die "Zeichen unterstreicht".

UnderlinePen.java


import framework.Product;

public class UnderlinePen implements Product {

	private char ulchar;

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

	public void use(String s) {

		int length = s.getBytes().length;

		System.out.println(s);

        for (int i = 0; i < length; i++) {
            System.out.print(ulchar);
        }

        System.out.println("");
    }

	public Product createClone() {
        Product p = null;
        try {
            p = (Product)clone();
        } catch (CloneNotSupportedException e) {
        	//Ausnahme ausgelöst, wenn die Objektklasse die klonbare Schnittstelle nicht implementiert
            e.printStackTrace();
        }
        return p;
    }
}

4-4. MessageBox-Klasse

Eine Klasse, die die Produktschnittstelle implementiert. Diese Klasse ist eine Klasse "Zeichen einschließen".

MessageBox.java


import framework.Product;

public class MessageBox implements Product {

	private char decochar;

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

	public void use(String s) {

		int length = s.getBytes().length;

		for (int i = 0; i < length + 2; i++) {
            System.out.print(decochar);
        }

		System.out.println("");
        System.out.println(decochar + s + decochar);

        for (int i = 0; i < length + 2; i++) {
            System.out.print(decochar);
        }

        System.out.println("");
    }

	public Product createClone() {
		Product p = null;
		try {
            p = (Product)clone();
        } catch (CloneNotSupportedException e) {
        	//Ausnahme ausgelöst, wenn die Objektklasse die klonbare Schnittstelle nicht implementiert
        	e.printStackTrace();
        }
        return p;
    }
}

4-5 Hauptklasse

Diese Klasse führt die Hauptverarbeitung durch.

Main.java


import framework.Manager;
import framework.Product;

public class Main {
    public static void main(String[] args) {

        Manager manager = new Manager();
        UnderlinePen upen = new UnderlinePen('~');
        MessageBox mbox = new MessageBox('*');
        MessageBox pbox = new MessageBox('+');
        manager.register("strong message", upen);
        manager.register("warning box", mbox);
        manager.register("slash box", pbox);

        Product p1 = manager.create("strong message");
        p1.use("Hello world");
        Product p2 = manager.create("warning box");
        p2.use("Hello world");
        Product p3 = manager.create("slash box");
        p3.use("Hello world");
    }
}

4-6 Ausführungsergebnis

Hello World
===========
*************
*Hello World*
*************
+++++++++++++
+Hello World+
+++++++++++++

5. Vorteile

Obwohl dies im Beispielprogramm ein relativ einfacher Fall war, kann das Erstellen einer Instanz eine komplizierte oder zeitaufwändige Verarbeitung erfordern. Es wäre sehr ineffizient, jedes Mal, wenn Sie eine Instanz erstellen, neues xxx () auszuführen. Sie können eine Instanz einfach erstellen, indem Sie einfach einen Prototyp erstellen und kopieren.

  1. GitHub

7. Liste der Entwurfsmuster

8. Referenz

Dieser Artikel und das Beispielprogramm wurden basierend auf den folgenden Büchern erstellt.

Es war sehr leicht zu verstehen und ich habe viel gelernt. Vielen Dank. Die detaillierten Erklärungen der Entwurfsmuster und Beispielprogramme sind geschrieben. Schauen Sie sich also auch die Bücher an.

Recommended Posts

Entwurfsmuster ~ Prototyp ~
Prototypmuster
Prototypmuster
Entwurfsmuster ~ Builder ~
Java-Entwurfsmuster
Entwurfsmuster ~ Proxy ~
Entwurfsmuster ~ Zustand ~
Entwurfsmuster ~ Strategie ~
Entwurfsmuster ~ Singleton ~
Entwurfsmuster ~ Composite ~
Entwurfsmuster (2): Builder
Entwurfsmuster (1): AbstractFactory
Entwurfsmuster ~ Befehl ~
Entwurfsmuster ~ Iterator ~
Entwurfsmuster ~ Fassade ~
Entwurfsmuster ~ Brücke ~
Entwurfsmuster ~ Mediator ~
Entwurfsmuster ~ Dekorateur ~
Entwurfsmuster ~ Interpreter ~
Entwurfsmuster ~ Beobachter ~
Entwurfsmuster ~ Memento ~
Entwurfsmuster ~ Adapter ~
Entwurfsmuster ~ Fliegengewicht ~
C ++ - Entwurfsmuster (TemplateMethod-Muster)
Entwurfsmuster ~ Fabrikmethode ~
Zusammenfassung des GoF-Entwurfsmusters
Entwurfsmuster ~ Vorlagenmethode ~
Zusammenfassung des Java-Entwurfsmusters
Entwurfsmuster ~ Verantwortungskette ~
[Entwurfsmuster] Java-Kernbibliothek
Einführung in Entwurfsmuster Prototyp
Entwurfsmuster nach Ruby Template-Methode Musternotiz
C # gekautes Designmuster: TemplateMethod
Anwendungsbeispiel für Entwurfsmuster (Nr. 1)
Java-Anfänger-Entwurfsmuster (Factory-Methodenmuster)
Erinnerungsmuster
Iteratormuster
Beobachtermuster
Builder-Muster
Brückenmuster
Befehlsmuster
Builder-Muster
Strategiemuster
Besuchermuster
Adaptermuster
Proxy-Muster
Strategiemuster
Zusammengesetztes Muster
Singleton-Muster
[Entwurfsmuster] Allgemeine Logik mit der Vorlagenmethode
Fassadenmuster
Dekorationsmuster
Fliegengewichtsmuster
Dekorateur Muster
Vermittlermuster
Fassadenmuster
Besuchermuster
Brückenmuster
PrintObserver "Observer Design Pattern: Beschreibung und Implementierungsbeispiel"
Überdenken des Entwurfsmusters mit Java8 Lambda-Ausdruck & Stream - Befehlsmuster -