>>864
> つまり印刷開始メッセージで渡される各種印刷パラメーターとかの初期設定は、
> 印刷とは関係の無いアイドル状態オブジェクトが処理しなければなりません。
状態遷移と、メッセージの処理を分離した方が良いと思う。

メッセージを受け取った段階で、

 入力: 現在の状態、メッセージ
 出力: 次の状態

という関数なりテーブルなりを引いて状態遷移のみ行う.メッセージの処理は即座に行わず、
とりあえずキューに貯めておく。状態遷移が終わった後でキューからメッセージを取り出して、
具体的な処理を行う。(ステートパターン+コマンドパターン)

あと印刷状態を細分して,「印刷開始状態(ここで印刷関係のパラメタ設定)」「印刷中状態」
「印刷終了状態」ぐらいに分割すれば? ステートパターンを使う場合,一つのステート中で
さらに複数ステートをネストして持っても OK だから、ステート分割の自由度は高いぞ.