Prototype パターン
MyMain
public class MyMain {
public static void main(String args[]) {
MyBuilder builder = new MyBuilder();
MyDirectorA dirA = new MyDirectorA();
MyClass ymd = dirA.createMyClass(builder);
MyDirectorB dirB = new MyDirectorB();
MyClass mdy = dirB.createMyClass(builder);
MyClass dates[] = new MyClass[5];
try {
for (int i = 0; i < 5; i++) {
if ((i % 2) == 0) {
dates[i] = (MyClass)ymd.clone();
} else {
dates[i] = (MyClass)mdy.clone();
}
}
} catch (CloneNotSupportedException ex) {
System.out.println(ex);
}
for (int i = 0; i < 5; i++) {
System.out.println(dates[i].getDateOfBirth());
}
}
}
MyClass
public class MyClass implements Cloneable {
private String dateOfBirth;
public MyClass(String dateOfBirth) {
this.dateOfBirth = dateOfBirth;
}
public String getDateOfBirth() {
return dateOfBirth;
}
public Object clone() throws CloneNotSupportedException {
return super.clone();
}
}
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
yyyy/mm/dd
mm/dd/yyyy
yyyy/mm/dd