Hier ist eine Zusammenfassung des ** Prototypmusters ** im GoF-Entwurfsmuster.
Es ist ein Programm, das die eingegebene Zeichenfolge unterstreicht oder einschließt.
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();
}
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();
}
}
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;
}
}
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;
}
}
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");
}
}
Hello World
===========
*************
*Hello World*
*************
+++++++++++++
+Hello World+
+++++++++++++
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.
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