Go 实现外观模式

43 min read

外观模式是一种软件设计模式,它提供了一个简单的接口,以隐藏一组复杂的子系统接口的复杂性。

在 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() 方法,这些方法隐藏了 EngineBrake 子系统的接口的复杂性。

然后我们实现了两个子系统,EngineBrake,分别具有 Start()Stop()Apply()Release() 方法。

最后,我们定义了一个 Car 结构体,实现了 CarFacade 接口,并在内部调用 EngineBrake 子系统的方法。

在客户端代码中,我们只需要创建一个 Car 实例并调用 Start()Stop() 方法即可启动和停止车辆,而不需要了解底层的子系统的复杂性。