Voici un résumé du ** modèle de prototype ** dans le modèle de conception du GoF.
C'est un programme qui souligne ou englobe la chaîne de caractères saisie.
Une interface qui définit les méthodes de réplication. Il hérite de l'interface clonable de java.
Product.java
package framework;
import java.lang.Cloneable;
public interface Product extends Cloneable {
public abstract void use(String s);
public abstract Product createClone();
}
Cette classe est utilisée pour instruire et gérer la création de produits.
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();
}
}
Une classe qui implémente l'interface Product. Cette classe est une classe qui "souligne les caractères".
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) {
//Exception levée lorsque la classe d'objet n'implémente pas l'interface clonable
e.printStackTrace();
}
return p;
}
}
Une classe qui implémente l'interface Product. Cette classe est une classe "caractère fermé".
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) {
//Exception levée lorsque la classe d'objet n'implémente pas l'interface clonable
e.printStackTrace();
}
return p;
}
}
Cette classe effectue le traitement principal.
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+
+++++++++++++
Dans l'exemple de programme, c'était un cas relativement simple, mais la création d'une instance peut nécessiter un traitement compliqué ou long. Il serait très inefficace de faire new xxx () chaque fois que vous créez une instance. Vous pouvez facilement créer une instance en créant simplement un prototype et en le copiant.
Cet article et exemple de programme ont été créés à partir des livres suivants.
C'était très facile à comprendre et j'ai beaucoup appris. Je vous remercie. Les explications détaillées des modèles de conception et des exemples de programmes sont écrites, veuillez donc également consulter les livres.
Recommended Posts