第6回目 Prototypeパターン
概要
Prototypeパターンは、あらかじめ用意しておいた「原型」からインスタンスを生成するようにするためのパターンです。
- new でオブジェクトを生成すれば Abstract Factory./ Factory Method.
- clone をつかう場合の Prototype.
サンプル
Client.java
private HashMap<String,Prototype> hash = new HashMap<String,Prototype>();
public void putObject(String key, Prototype proto) {
hash.put(key, proto);
}
public Prototype create(String key) {
return hash.get(key).createClone();
}
Prototype.java
interface Prototype extends Cloneable {
public abstract void message(String s);
public abstract Prototype createClone();
}
Prototype.java
class ConcretePrototype implements Prototype {
private String key;
public ConcretePrototype(String key) {
this.key = key;
}
public void message(String s) {
System.out.println(s);
}
public Prototype createClone() {
Prototype p = null;
try {p = (Prototype)clone();}
catch(CloneNotSupportedException e) {e.printStackTrace();}
return p;
}
}
Main.java
public class Main {
public static void main(String[] args){
Client client = new Client();
client.putObject("typeA", new ConcretePrototype('A'));
client.putObject("typeB", new ConcretePrototype('B'));
client.putObject("typeC", new ConcretePrototype('C'));
Prototype prototype1 = client.create("typeA");
Prototype prototype2 = client.create("typeB");
Prototype prototype3 = client.create("typeC");
prototype1.message("message1");
prototype2.message("message2");
prototype3.message("message3");
}
}
結果
message1
message2
message3