- 基本介绍
- 外观模式(Facade),也叫“过程模式:外观模式为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用
- 外观模式通过定义一个一致的接口,用以屏蔽内部子系统的细节,使得调用端只需跟这个接口发生调用,而无需关心这个子系统的内部细节
理解:体现了接口隔离原则,客户端不应该依赖它不需要的接口。对客户端与各个子系统进行解耦。合理使用外观模式可以帮助更好地划分访问层次(可用于分层设计)。或者一些大型系统难以维护、扩展时提供一个遗留系统的比较清晰简单的接口。
-
类图
image.png -
代码示例
package facade
import "fmt"
// 原A业务模块
type A interface {
running() string
}
type AImpl struct {}
func (A *AImpl) running() string {
return "Module A is running"
}
func NewA() A {
return new(AImpl)
}
// 原B业务模块
type B interface {
running() string
}
type BImpl struct {}
func (B *BImpl) running() string {
return "Module B is running"
}
func NewB() B {
return new(BImpl)
}
// facade 接口
type Api interface {
running() string
}
type apiImpl struct {
a A
b B
}
func (a *apiImpl) running() string {
return fmt.Sprintf("%v\n%v",a.a.running(),a.b.running())
}
func NewApi() Api {
return &apiImpl{a: NewA(), b: NewB()}
}
网友评论