外观模式是一种软件设计模式,它提供了一个简单的接口,以隐藏一组复杂的子系统接口的复杂性。
在 Go 中,可以使用结构体和接口来实现外观模式。
下面是一个示例代码,演示如何实现一个外观模式:
package main
import (
"fmt"
)
// 外观接口
type CarFacade interface {
Start() string
Stop() string
}
// 子系统1
type Engine struct{}
func (e *Engine) Start() string {
return "Starting engine"
}
func (e *Engine) Stop() string {
return "Stopping engine"
}
// 子系统2
type Brake struct{}
func (b *Brake) Apply() string {
return "Applying brake"
}
func (b *Brake) Release() string {
return "Releasing brake"
}
// 外观实现
type Car struct {
engine *Engine
brake *Brake
}
func (c *Car) Start() string {
c.engine.Start()
return c.brake.Release()
}
func (c *Car) Stop() string {
c.brake.Apply()
return c.engine.Stop()
}
// 客户端代码
func main() {
car := &Car{
engine: &Engine{},
brake: &Brake{},
}
fmt.Println(car.Start())
fmt.Println(car.Stop())
}
在这个示例中,我们定义了一个 CarFacade
接口,它包括了 Start()
和 Stop()
方法,这些方法隐藏了 Engine
和 Brake
子系统的接口的复杂性。
然后我们实现了两个子系统,Engine
和 Brake
,分别具有 Start()
、Stop()
和 Apply()
、Release()
方法。
最后,我们定义了一个 Car
结构体,实现了 CarFacade
接口,并在内部调用 Engine
和 Brake
子系统的方法。
在客户端代码中,我们只需要创建一个 Car
实例并调用 Start()
和 Stop()
方法即可启动和停止车辆,而不需要了解底层的子系统的复杂性。