第12节 桥接模式


❤️💕💕Java和Golang的设计模式,设计模式介绍、创建者模式、结构型模式、行为型模式。Myblog:http://nsddd.topopen in new window


[TOC]

why

在Go语言中,桥接模式(Bridge Pattern)是一种结构型设计模式。它允许你将抽象部分和实现部分分离开来,使它们能够独立地变化。

这种模式的设计关键思想是使用组合而不是继承来组织代码,Golang 中通过接口和结构体实现。

简单实现

package main

import "fmt"

type Implementor interface {
    OperationImp() string
}

// 组合
type Abstraction struct {
    imp Implementor
}

func (a *Abstraction) Operation() string {
    return a.imp.OperationImp()
}

type ConcreteImplementorA struct{}

func (imp *ConcreteImplementorA) OperationImp() string {
    return "ConcreteImplementorA operation"
}

type ConcreteImplementorB struct{}

func (imp *ConcreteImplementorB) OperationImp() string {
    return "ConcreteImplementorB operation"
}

func main() {
    abstraction := &Abstraction{&ConcreteImplementorA{}}
    fmt.Println(abstraction.Operation())

    abstraction.imp = &ConcreteImplementorB{}
    fmt.Println(abstraction.Operation())
}

在上面的代码中,我们定义了一个抽象类Abstraction及其实现类ConcreteImplementorAConcreteImplementorB。抽象类Abstraction包含一个对实现类Implementor的引用,并定义了一个Operation()方法,该方法委托给实现类的OperationImp()方法执行。这样,在使用时,可以根据需要灵活地切换实现类。

main()函数中,我们首先创建一个指向ConcreteImplementorA的指针并调用Operation()方法。然后,我们将实现类更改为ConcreteImplementorB,并再次调用Operation()方法来验证实现的灵活性。

逻辑实现

我们如果需要对某个物品和颜色进行操作,使用 桥接可以了将他们之间联系起来

package main

import "fmt"

// 抽象部分 - 形状
type Shape interface {
    Draw()
}

// 实现部分 - 颜色 
type Color interface {
    ApplyColor()
}

// 实现部分 - 红色
type RedColor struct{}

func (c *RedColor) ApplyColor() {
    fmt.Println("Applying red color")
}

// .... 其他颜色


// 扩展抽象部分 - 圆形
type Circle struct {
    color Color // 引用实现部分颜色
}

// ... 其他形状


func (s *Circle) Draw() {
    fmt.Println("Drawing circle")
    s.color.ApplyColor() // 调用实现部分的方法
}

func main() {
    circle := &Circle{&RedColor{}}
    circle.Draw()
}

在上面的代码中,我们定义了一个抽象类Shape及其实现类Circle。抽象类Shape规定了形状应有的行为Draw(),并包含一个对实现类Color的引用。

我们还定义了实现类RedColor,并实现了它的方法ApplyColor()。然后,我们扩展了抽象类Shape,定义了一个圆形类Circle,它继承了Shape,并且它的行为Draw()中调用了实现类的ApplyColor()方法。

main()函数中,我们创建了一个指向Circle的指针,并将其颜色设置为RedColor。然后,我们调用Draw()方法,该方法输出了“Drawing circle”并调用了RedColor实现类的方法。

优缺点

优点:

  1. 提高代码重用性和灵活性:适配器模式可以将现有的代码与新的代码组合在一起,从而提高代码的重用性和灵活性。
  2. 简化代码实现:适配器模式可以隐藏复杂的逻辑,简化代码实现过程。
  3. 提高系统可靠性:适配器模式可以降低系统间的耦合度,增强系统的可靠性和稳定性。

缺点:

  1. 过多使用适配器会增加系统复杂性:如果过多地使用适配器模式,会增加系统的复杂性,降低代码的可读性和可维护性。
  2. 增加系统运行时间和空间开销:适配器模式需要进行额外的逻辑处理,因此会增加系统的运行时间和空间开销。
  3. 可能存在适配器不兼容问题:由于适配器模式的实现方式不同,可能存在适配器不兼容问题。

END 链接