Skip to content

Latest commit

 

History

History

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 

好的,下面是加上代码实例的完整描述:

桥接模式(Bridge Pattern)是一种结构型设计模式,它将抽象部分与实现部分分离开来,使它们可以独立变化。桥接模式的主要目的是将抽象和实现解耦,让它们可以独立地变化,从而达到最小程度的耦合关系。

桥接模式主要涉及以下四个角色:

  1. 抽象化(Abstraction): 定义了抽象类的接口,维护了一个对实现化对象的引用。
  2. 细化抽象化(RefinedAbstraction): 扩展了抽象化接口,改变了父类的构造方法,以便在构造时可以输入一个实现化对象。
  3. 实现化接口(Implementor): 定义了实现类的接口,供扩展具体实现类使用。
  4. 具体实现化(ConcreteImplementor): 是实现化接口的具体实现类。

下面是使用Go语言实现桥接模式的示例代码:

// Implementor 定义了实现类的接口
type OperatingSystem interface {
    Render()
}

// ConcreteImplementor 是具体的实现类
type Windows struct{}

func (w *Windows) Render() {
    fmt.Println("Rendering on Windows")
}

type MacOS struct{}

func (m *MacOS) Render() {
    fmt.Println("Rendering on MacOS")
}

type Linux struct{}

func (l *Linux) Render() {
    fmt.Println("Rendering on Linux")
}

// Abstraction 定义了抽象类的接口
type AbstractGUI struct {
    os OperatingSystem
}

func (gui *AbstractGUI) Render() {
    gui.os.Render()
}

func (gui *AbstractGUI) SetOperatingSystem(os OperatingSystem) {
    gui.os = os
}

// RefinedAbstraction 扩展了抽象类的接口
type RefinedGUI struct {
    AbstractGUI
    theme string // 新增一个主题属性
}

func NewRefinedGUI(os OperatingSystem, theme string) *RefinedGUI {
    refinedGUI := &RefinedGUI{theme: theme}
    refinedGUI.SetOperatingSystem(os)
    return refinedGUI
}

func (gui *RefinedGUI) Render() {
    fmt.Printf("Rendering with %s theme...\n", gui.theme)
    gui.AbstractGUI.Render()
}

func main() {
    windowsGUI := NewRefinedGUI(&Windows{}, "Classic")
    windowsGUI.Render() // Rendering with Classic theme...
                        // Rendering on Windows

    macGUI := NewRefinedGUI(&MacOS{}, "Modern")
    macGUI.Render() // Rendering with Modern theme...
                    // Rendering on MacOS
}

在这个示例中:

  • OperatingSystem是实现化接口,定义了操作系统渲染图形界面的方法。
  • WindowsMacOSLinux是具体的实现类,实现了OperatingSystem接口。
  • AbstractGUI是抽象化类,维护了一个对实现化对象(操作系统)的引用os
  • RefinedGUI是细化抽象化类,扩展了AbstractGUI类,新增了theme属性和相应的渲染逻辑。

通过将抽象化和实现化分离,桥接模式使得它们可以独立地变化。如果需要新增一种操作系统,只需要新建一个实现了OperatingSystem接口的具体实现类即可。如果需要新增一种图形界面风格,只需要新建一个继承自AbstractGUI的细化抽象化类即可。

桥接模式的优点是提高了系统的可扩展性和灵活性,符合"开放-封闭原则"。但它也增加了系统的复杂性和理解难度。在合适的场景下,桥接模式是一种很好的设计选择,可以帮助我们构建更加灵活和可维护的系统。