パターンを紹介します。パターンは、オブジェクトの生成方法に一工夫加えることで、より柔軟にオブジェクトを生成することを目的とするものです。パターンでは、インスタンスの生成をサブクラスに行わせることで、より柔軟に生成するインスタンスを選択することが可能となります。オブジェクトを生成する場合、下記のように記述するのが普通です。Product();しかし、このようなオブジェクト生成方法では、十分に満足のいく結果が得られないことがあります。method)を通して間接的にオブジェクトを生成します。Product()としてオブジェクトを生成する場合に比べ、より柔軟な結果をもたらします。それでは、サンプルケースを見てみましょう。パターンに引き続き、生徒たちに版画クラスを作成させることを目的としましょう。前回と違うのは、「親クラスでは版材を与えないようにする」という点です。クラスでは、以下のようにして版材を与えていました。Wood();しかし、いつも人とは違ったことをしたがる今川君が「先生、僕は木じゃなくて芋に彫りたい」と言ってきたのです。生徒の自由な発想を大切にしたいと常日頃考えているあなたは、この申し出を受け入れたいと思い、親クラスを変更することにしました。用意することを条件として、版材にどのようなインスタンスを利用するかは、すべて生徒に任せよう。クラスを見てみましょう。型の決定をサブクラスに任せられるようにすることが目的です。);}}さて、何が問題になるでしょう?上リストで、ハイライトされている部分では、どのクラスのインスタンスが生成されるかは決定したくありません。生成するインスタンスの実際の型を決めてしまうと、サブクラスで自由に生成するインスタンスの型を決定することができないからです。利点が失われてしまいます。パターンが与えられます。パターンでは、インスタンス生成のためのメソッドを用意します。そのインスタンスを生成するためのメソッドを通してインスタンスの生成を行います。具体的には、以下のようなソースコードとなります。メソッドをオーバーライドするメソッドを記述し、版材を自由に選択することができるようになります。実際にソースコードを見てみましょう。}}これで生徒が自由に版材を選択できるようになりました。クラス図を見てみましょう。オブジェクトを返すように記述しましたが、デフォルトの処理を記述せず、抽象メソッドとしておくことも可能ですね。パターンの典型的なクラス図は以下の様になります。Textを触ってみた。