Commandパターンとは第22章ではCommandパターンを学びます。あるオブジェクトに対して要求を送るということは、そのオブジェクトのメソッドを呼び出すことと同じです。メソッドにどのような引数を渡すか、ということによって要求の内容は表現されます。それには限界があります。そこで要求自体をオブジェクトにしてしまい、そのオブジェクトを引数に渡すようにします。それがCommandパターンです。Commandパターンは、要求をCommandオブジェクトにして、それらを複数組み合わせて使えるようにするパターンです。サンプルケース理科の授業で、「水100gに食塩は何g溶けるか」という飽和食塩水の実験を行うことにしました。手順は以下のとおりです。記録するまた、「食塩10gをすべて溶かすには水は何g必要か」という実験も行います。手順は以下のとおりです。記録する生徒全員に実験方法を記述させるのは大変なので、実験方法が載っている実験セットを用意し、それを生徒に渡し、実験させることにします。この実験をソースコードにすると、以下のような感じになります。}ここで、濃度10%の食塩水100gを作る実験を追加で行いたいとすると、実験セットクラスの実験を行うメソッドを以下のように修正しなければなりません。ifを追加する必要があります。それに対応するパラメータの種類も増やさなければなりません。これでは拡張性が良いとは言えません。そこで、実験の内容をint値で表すような方法はやめて、実験そのものを1つのCommandオブジェクトに含ませ、そのオブジェクトごと引数に渡す方法を考えます。実験内容、つまりCommandオブジェクトに共通のインターフェースを持たせることにより、実験セットクラスは、どんな種類の実験内容(Commandオブジェクト)を受け取っても、共通の実験を行うメソッドを実行すれば良いことになります。これがCommandパターンです。Commandパターンを適用した場合、クラス図は以下のようになります。実際に、上記実験のソースコードを記述してみます。}下記は実験内容を表すクラスの共通インターフェースを提供するスーパークラスです。以下が実際の実験内容を表すクラス、すなわちこれらのインスタンスがCommandオブジェクトとなります。}}そして、実験を行う生徒です。生徒は実験内容(Commandオブジェクト)を用意し、それらを実行します。}Commandパターンを適用すると、実験セットのソースコードを変更しなくても、いろいろな実験を追加することができます。既存の実験内容を組み合わせて、新たな実験を作ることも可能です。新しい実験内容のexecuteメソッド内に、既存の実験内容のexecuteメソッドを記述すれば、新しい実験内容が実行された際、記述した順に既存の実験内容も実行されます。これにより、再利用性も高くなります。実習課題1濃度10%の食塩水100gを用意し、食塩を1gずつ加えていき、飽和濃度に達するには何gの食塩が必要か、という実験を追加することになりました。この実験をCommandパターンを利用し、実装しなさい。追加する実験のコマンドクラスを用意します。}この実験コマンドを利用する生徒クラスを以下のように追加します。}そして、実験セットクラスは編集しなくても良いのです。パターンの一般的なクラス図は以下のようになります。Textを触ってみた。