ForNext
Only Do What Only You Can Do
Prototype
VBScript
JScript
Perl
PHP
Python
Ruby
PowerShell
Scala
F#
C
C++
C++Builder
VC++
C#
Java
更新日 : 2010.11.25
■ 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(); } }
■ 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++) { // 都度 new せずに、作成済みのプロトタイプをコピーする 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()); } } }
L:\>java MyMain yyyy/mm/dd mm/dd/yyyy yyyy/mm/dd mm/dd/yyyy yyyy/mm/dd