Qu'est-ce qu'un modèle de prototype?
--Prototype: crée une instance à partir du "prototype". Pas de la classe. --Il existe une classe d'entité qui implémente l'interface clonable et peut se cloner.
Les actions comme dessiner un carré sont courantes, mais à ce moment-là
-Carré entouré de "/" -Carré entouré de "*" --Carré entouré de "x"
Quand il y a trois modèles qui sont divisés comme ça, il ne sert à rien de créer chacun dans une classe différente.
Classifiez uniquement la forme de la figure à dessiner et mappez les types de ligne vers Client dans la même classe.
Et lorsque vous répétez le même "dessin d'un triangle avec la ligne" / "", vous pouvez cloner une nouvelle instance de l'instance Prototype enregistrée comme modèle et l'utiliser.
Personnage
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("Message souligné", linePen);// 2
manager.register("Boîte d'avertissement",mbox); //2
manager.register("Boîte diagonale", sbox); //2
//produire
Product p1 = manager.create("Message souligné");//3
p1.use("Hello world"); //4
Product p2 = manager.create("Boîte d'avertissement"); //3
p2.use("Hello world"); //4
Product p3 = manager.create("Boîte diagonale"); //3
p3.use("Hello world"); //4
}
}
Résultat d'exécution
¥ Hello world ¥
xxxxxxxxxxxxxxx
***************
* Hello world *
***************
///////////////
/ Hello world /
///////////////
[6 . Modèle de prototype \ | TECHSCORE ](https://www.techscore.com/tech/DesignPattern/Prototype.html/)
Recommended Posts