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