外观(Facade)模式是一种结构型设计模式。这种模式的作用是隐藏系统底层的复杂逻辑,只提供一个简单易用的接口给调用者。通过外观模式,将系统底层所需要的各种接口整理为一个通用的接口以便于调用方使用。换句话说,就是外观模式为一个复杂系统做了更高层次的抽象。
最简单的一个例子是在我们的服务启动时,有各种各样的依赖服务或者数据需要进行初始化,每个服务都有一个初始化函数,我们可以统一在最顶层写一个 Init,并将我们的依赖的初始化逻辑都封装在此处,对外只暴露这个顶层的初始化函数给用户调用即可,用户不必关注具体的初始化细节。
package main
import "fmt"
func InitConfig() {
fmt.Println("config init ok")
}
func InitMySQLDB() {
fmt.Println("mysql init ok")
}
func InitRedis() {
fmt.Println("redis init ok")
}
func InitGrpc() {
fmt.Println("grpc init ok")
}
func Init() {
// 初始化服务配置
InitConfig()
// 初始化Mysql数据库连接
InitMySQLDB()
// 初始化redis客户端
InitRedis()
// 初始化grpc客户端
InitGrpc()
}
func main() {
Init()
fmt.Println("my server is running")
}
运行示例,输出结果:
config init ok
mysql init ok
redis init ok
grpc init ok
my server is running