外观是一种结构型设计模式, 能为复杂系统、 程序库或框架提供一个简单 (但有限) 的接口。
尽管外观模式降低了程序的整体复杂度, 但它同时也有助于将不需要的依赖移动到同一个位置。
概念示例
人们很容易低估使用信用卡订购披萨时幕后工作的复杂程度。 在整个过程中会有不少的子系统发挥作用。 下面是其中的一部分:
- 检查账户
- 检查安全码
- 借记/贷记余额
- 账簿录入
- 发送消息通知
在如此复杂的系统中, 可以说是一步错步步错, 很容易就会引发大的问题。 这就是为什么我们需要外观模式, 让客户端可以使用一个简单的接口来处理众多组件。 客户端只需要输入卡片详情、 安全码、 支付金额以及操作类型即可。 外观模式会与多种组件进一步地进行沟通, 而又不会向客户端暴露其内部的复杂性。
walletFacade.go: 外观
account.go: 复杂子系统的组成部分
securityCode.go: 复杂子系统的组成部分
wallet.go: 复杂子系统的组成部分
ledger.go: 复杂子系统的组成部分
notification.go: 复杂子系统的组成部分
main.go: 客户端代码
output.txt: 执行结果