複雑な処理をシンプルなインタフェース(Facade)で包むことによって、外部から処理を呼び出す時に複雑な処理を意識しなくても良いようにする。複雑な処理とは例えばメソッドを呼び出す順序が決まっている処理とか。
- インターフェースがシンプルになって外部から呼びやすくなる。
- Facadeでラップしても呼ばれるメソッドでpublicである限り予期せぬ呼ばれ方はされそう。
- 欠点というか、Facadeパターンを適用しないといけないという時には、正しくない呼び方をされる可能性のあるpublicなメソッドがある状況もあると思うが、そういう状況が発生していること自体良くないと思う。クラスのルールはクラス内で保証すべきだと思う。
- 今回の例ではpublicな異なるクラス間でルールを保証したが、本当は、Emailクラスの中で必要な情報をセットしてコネクションを確立して送ってコネクションを閉じるという一連の流れを保証するメソッドを用意するか、Emailクラスをパッケージプライベートにして、ラップするクラスを同じパッケージ内で用意してそこで保証するべきだと思う。