home > デザインパターン >

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

Objective-C

D

VB

VB.NET

Delphi

Ada

PL/SQL

T-SQL

関数型

inserted by FC2 system