【デザインパターン】Prototypeパターン

Prototypeパターンのコート例です。

package org.example.prototype;

import java.io.Closeable;

public interface Prototype extends Cloneable {
    public void method1();
    public void method2();
    public Prototype createClone();
}
package org.example.prototype;

import java.io.IOException;

public class ConcretePrototype implements Prototype {
    public ConcretePrototype() {
        super();
    }

    @Override
    public void method1() {

    }

    @Override
    public void method2() {

    }

    @Override
    public Prototype createClone() {
        Prototype prototype = null;

        try {
            prototype = (Prototype)clone();
        }catch (CloneNotSupportedException e) {
            e.printStackTrace();
        }
        return prototype;
    }
}
package org.example.prototype;

public class Main {
    public static void main(String[] args){
        Prototype PrototypeObject = new ConcretePrototype();
        Prototype cloneObject = PrototypeObject.createClone();
        cloneObject.method1();
        cloneObject.method2();
    }
}

Prototypeインターフェースを実装したConcretePrototypeを作成し、以後、createClone()メソッドを使用して複製したものを使用する、という使い方をします。

Cloneableを実装しないとClone()実行時にCloneNotSupportedExceptionが発生するみたいです。

これ、Java以外にもC#とかにも無いっすかね?

※C#ではICloneableを実装すると使えるみたいです。

あと、Cloneは参照型のメンバーがいた場合、複製したObjectも複製前と同じ参照先を参照するらしいです。

完全に複製するには、CloneをOverrideして、参照型のメンバーをさらにCloneする、というやり方が必要になるようです。

Cloneを使用する場合はその当たり気をつけないといけないですね。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください