Builderパターンの実装例 (Java)
[履歴] [最終更新] (2013/08/23 07:43:27)
最近の投稿
注目の記事

概要

異なるクラスA,Bがあり、それらのインスタンスを使用して「あるもの」を構築 (Builder) するためのメソッドの呼び出し手順は同じである場合を考えます。共通の構築手順の中で必要となるメソッド群を抽象クラスに記述しておき、クラスA,Bで継承し具体的内容を実装し、共通の構築手順自体をDirectorクラスに記述することで、「あるもの」を構築するための具体的な手順や内容をMainに対して隠蔽することができます。

サンプルコード

sample.java

class Sample {
    public static void main(String args[]) {
        ConcreteBuilder concreteBuilder = new ConcreteBuilder();
        Director director = new Director(concreteBuilder);
        director.construct();
        System.out.println(concreteBuilder.getResult());
    }
}

Director.java

class Director {
    private Builder builder;
    public Director(Builder builder) {this.builder=builder;}
    public void construct() {
        builder.step1("step1");
        builder.step2("step2");
        builder.step3("step3");
    }
}

Builder.java

abstract class Builder {
    public abstract void step1(String str);
    public abstract void step2(String str);
    public abstract void step3(String str);
}

ConcreteBuilder.java

class ConcreteBuilder extends Builder {
    private StringBuffer buf = new StringBuffer();
    public void step1(String str) {buf.append(str+" ");}
    public void step2(String str) {buf.append(str+" ");}
    public void step3(String str) {buf.append(str);}
    public String getResult() {return buf.toString();}
}

実行例

$ javac Builder.java  ConcreteBuilder.java  Director.java  sample.java && java Sample
step1 step2 step3
関連ページ