CommandとReceiverのライフサイクルが異なるからじゃないかな

Recieverクラスを除去するとCommandに
System.out.println(msg);
を書かないといけなくなるっしょ

System.out.println(msg);
を変えたくなったときに複数のCommandを修正しないといけないのが
嫌だったんだと思うよ