LoginSignup
6
6

More than 5 years have passed since last update.

デザインパターン #6 〜Prototype〜

Posted at

第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
6
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
6