Was ist ein Prototypmuster?
--Prototyp: Erstellen Sie eine Instanz aus dem "Prototyp". Nicht aus der Klasse.
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.
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
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 /
///////////////
--Produkt ist die Rolle des Prototyps --MessageBox und UnderLinePen spielen die Rolle des Concrete Prototype --Manager ist die Rolle des Kunden
[6 . Prototypmuster \ | TECHSCORE ](https://www.techscore.com/tech/DesignPattern/Prototype.html/)
Recommended Posts