Prototype Pattern
- Avoid costly creation
- Typically doesn't use "new"
- Although each copy is a unique instance
- Can utilize parameters in the constructor
- Usually implement a registry
- Usually return a clone object from the registry
Ex.
- Create an abstract class
- implements Cloneable
public abstract class Item implements Cloneable {
private String item;
private double price;
@Override
protected Object clone() throws CloneNotSupportedException {
return super.clone();
}
public String getItem() {
return item;
}
public void setItem(String item) {
this.item = item;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
}
- Create the inherited classes
public class Movie extends Item {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
- Create the Registry, the core of the pattern
public class Registry {
private Map<String, Item> items = new HashMap<String, Item>();
public Registry(){
loadItems();
}
private void loadItems(){
Movie movie = new Movie();
movie.setName("Quijote");
Toys toy = new Toys();
toy.setAge(12);
items.put("Movie", movie);
items.put("Toy", toy);
}
public Item createItem(String type){
Item item = null;
try{
item = (Item)(items.get(type)).clone();
}catch(CloneNotSupportedException e){
e.printStackTrace();
}
item = items.get(type);
return item;
}
}
- Execute the pattern
public static void main(String[] args) {
Registry registry = new Registry();
Movie movie = (Movie)registry.createItem("Movie");
movie.setName("A");
Movie movie2 = (Movie)registry.createItem("Movie");
movie2.setName("A");
}
Comentarios
Publicar un comentario