桥接模式(Bridge Design Pattern)

桥接模式将抽象部分与它的实现部分分离,使功能实现独立于接口。

解决的问题

如果直接实现接口,扩展起来不灵活。这种情况下可以将实现分离出来,减少它们之间的耦合。桥接模式是为了让类的职责更单一,维护更方便。

代码示例

我们以汽车为例, 汽车可以安装、切换不同的发动机,汽车是不需要实现发动接口的,只需要在汽车上装载一个发动机,然后汽车可直接通过调用发动机来启动它,这样汽车和发动机就实现进行分离,减少了耦合。假如说Geely汽车目前使用的是国产的发动机,现在它要换成Volvo的发动机:

package bridge

import "fmt"

//汽车抽象
type Car interface {
    UseEngine(Engine)
    Start()
}

//发动机
type Engine interface {
    Start()
}

//Volvo发动机
type VolvoEngine struct{}

//发动机启动
func (v VolvoEngine) Start() {
    fmt.Println("Start Volvo Engine")
}

//吉利汽车
type GeelyCar struct {
    Engine Engine
}

//使用什么发动机
func (g *GeelyCar) UseEngine(engine Engine) {
    g.Engine = engine
}

//汽车启动
func (g GeelyCar) Start() {
    g.Engine.Start()
    fmt.Println("GeelyCar Started")
}

输出:

var volvoEngine Engine = &VolvoEngine{}
var geelyCar Car = &GeelyCar{}
geelyCar.UseEngine(volvoEngine)
geelyCar.Start()

// Output:
// Start Volvo Engine
// GeelyCar Started

results matching ""

    No results matching ""