Facade は、 構造に関するデザインパターンの一つで、 複雑なクラスのシステム、 ライブラリー、 またはフレームワークに対して単純な (しかし限定された) インターフェースを提供します。
Facade は、 アプリケーションの全体としての複雑さを軽減しますが、 それと同時に望ましくない依存性を一箇所に集めるのにも役立ちます。
概念的な例
クレジットカードを使ってピザを注文した時、 その裏で何が起きているか、 我々はその複雑性を過小評価しがちです。 この工程には、 いくつものサブシステムが存在します。 主要なものだけ挙げると:
- 口座の確認
- 口座の暗証番号の確認
- クレジットまたはデビットカードの残高照会
- 注文台帳に項目作成
- 通知の送信
このような複雑なシステムは、 途中で理解できなくなったりしがちです。 またちょっでも間違ったことをすると、 簡単に異常を起こしてしまいます。 Facade パターンの概念は、 そのためにあります: 単純なインターフェースを使ってクライアントがいくつものコンポーネントと作業できるようにする。 クライアントは、 カードの詳細、 暗唱番号、 支払額そして手続きの種類だけを入力します。 ファサードは、 クライアントから内部の複雑さを隠蔽し、 それ以降の種々のコンポーネントとのやりとりを行います。
walletFacade.go: ファサード
account.go: 複雑なサブシステム (部分)
securityCode.go: 複雑なサブシステム (部分)
wallet.go: 複雑なサブシステム (部分)
ledger.go: 複雑なサブシステム (部分)
notification.go: 複雑なサブシステム (部分)
main.go: クライアント・コード
output.txt: 実行結果