Kotlin bridge pattern

How to write a bridge pattern in Kotlin

An example of a bridge pattern in Kotlin.

Table of contents for design patterns in Kotlin

The bridge pattern is a design pattern used in software engineering that is meant to “decouple an abstraction from its implementation so that the two can vary independently”, introduced by the Gang of Four. The bridge uses encapsulation, aggregation, and can use inheritance to separate responsibilities into different classes. Wikipedia

Example:

Rocket

interface Rocket {
    fun fire()
}

SuperRocket

class SuperRocket: Rocket {
    override fun fire() = println("Super rocket fire!")
}

TurboRocket

class TurboRocket: Rocket {
    override fun fire() = println("Turbo rocket fire!")
}

RocketLauncher

interface RocketLauncher {
    val rocket: Rocket
    fun fire()
}

RocketSite

class RocketSite(override val rocket: Rocket) : RocketLauncher {
    override fun fire() = rocket.fire()
}

Usage

fun main() {
    val superRocker = SuperRocket()
    val turboRocket = TurboRocket()

    RocketSite(superRocker).fire()
    RocketSite(turboRocket).fire()
}

Result

Super rocket fire!
Turbo rocket fire!