Early previewThis guide is in development. Items tagged verify are still being checked against official docs.
nebx Learn
GitHub
Menu
Go

Go

Simple, fast to compile, built for concurrent network services.

Paradigm
Procedural, composition over inheritance
Typing
Static, strong, structural interfaces
Memory
Concurrent low-latency GC
Runs
Single static native binary
Concurrency
Goroutines and channels
Structural pattern

Bridge

Intent

Splits a large class or closely related classes into two hierarchies, abstraction and implementation, that vary independently.

Problem

Shape × Colour subclasses explode: RedCircle, BlueCircle, RedSquare…

Solution

Use composition: the abstraction holds a reference to an implementation object.

Real-world analogy

Think of it like this

One remote control (abstraction) can drive many TV brands (implementations). New remotes and new TVs evolve separately.

Structure

association / extends implements / depends on
Abstraction - i: Implementation+ feature1()+ feature2() 1 RefinedAbstraction + featureN() 4 «interface» Implementation + method1()+ method2() 2 ConcreteImplementation + method1()+ method2() 3

Hover or tap a numbered role to highlight it in the diagram.

  1. 1Abstraction — Abstraction provides high-level control logic and delegates low-level work to the implementation.
  2. 2Implementation — Implementation declares the interface common to all concrete implementations.
  3. 3ConcreteImplementation — Concrete Implementations contain platform-specific code.
  4. 4RefinedAbstraction — Refined Abstractions add variants of the control logic.

Code example

A Go code sample for Bridge is coming soon. Factory Method, Singleton, Decorator, Observer and Strategy already have code in all six languages.

Applicability

Use Bridge when dividing a monolithic class with several variants.

Use Bridge when extending a class in independent dimensions.

Use Bridge when switching implementations at runtime.

Pros and cons

Pros

  • Platform-independent abstractions
  • Open–Closed on both sides

Cons

  • More complex for highly cohesive classes

Relations with other patterns

Check yourself

Check yourself

Shapes (circle, square) must render with a vector or a raster renderer, and both lists keep growing.

Saved in this browser only. Part of Structural patterns (0/7).