Builder パターン

Builder パターン

MyMain

public class MyMain {
    public static void main(String args[]) {
        MyBuilder builder = new MyBuilder();

        // "年月日"形式の日付
        MyDirectorA dirA = new MyDirectorA();
        MyClass myclass  = dirA.createMyClass(builder);
        System.out.println(myclass.getDateOfBirth());

        // "月日年"形式の日付
        MyDirectorB dirB = new MyDirectorB();
        myclass          = dirB.createMyClass(builder);
        System.out.println(myclass.getDateOfBirth());
    }
}

MyClass

public class MyClass {
    private String dateOfBirth;

    public MyClass(String dateOfBirth) {
        this.dateOfBirth = dateOfBirth;
    }

    public String getDateOfBirth() {
        return dateOfBirth;
    }
}

MyBuilder

// 部品を作成する
public class MyBuilder {
    private String dateOfBirth;

    public MyBuilder() {
        dateOfBirth = "";
    }

    public void addYear() {
        dateOfBirth += "yyyy";
    }
    public void addMonth() {
        dateOfBirth += "mm";
    }
    public void addDay() {
        dateOfBirth += "dd";
    }
    public void addDelimiter() {
        dateOfBirth += "/";
    }

    public MyClass getMyClass() {
        MyClass result = new MyClass(dateOfBirth);
        dateOfBirth = "";
        return result;
    }
}

MyDirectorA

// 部品を組み合わせる
public class MyDirectorA {
    public MyClass createMyClass(MyBuilder builder) {
        builder.addYear();
        builder.addDelimiter();
        builder.addMonth();
        builder.addDelimiter();
        builder.addDay();

        return builder.getMyClass();
    }
}

MyDirectorB

// 部品を組み合わせる
public class MyDirectorB {
    public MyClass createMyClass(MyBuilder builder) {
        builder.addMonth();
        builder.addDelimiter();
        builder.addDay();
        builder.addDelimiter();
        builder.addYear();

        return builder.getMyClass();
    }
}

実行結果

L:\>java MyMain
yyyy/mm/dd
mm/dd/yyyy