Bridge
Problemet
Har du två hierarkier som är beroende av varandra (t.ex. olika fjärrkontroller × olika apparater) växer antalet klasser explosivt om du försöker representera varje kombination som en egen klass — TVRemote, RadioRemote, TVAdvancedRemote, RadioAdvancedRemote… Bridge separerar de två hierarkierna så de kan variera var för sig.
Lösningen
public interface IDevice{ void TurnOn(); void TurnOff();}
public class TV : IDevice{ public void TurnOn() => Console.WriteLine("TV: På"); public void TurnOff() => Console.WriteLine("TV: Av");}
public class Radio : IDevice{ public void TurnOn() => Console.WriteLine("Radio: På"); public void TurnOff() => Console.WriteLine("Radio: Av");}
// Abstraktionen — bryggan till IDevice, inte en specifik apparatpublic abstract class RemoteControl{ protected IDevice _device; protected RemoteControl(IDevice device) => _device = device;
public abstract void TogglePower();}
public class BasicRemote : RemoteControl{ public BasicRemote(IDevice device) : base(device) { } public override void TogglePower() => _device.TurnOn();}RemoteControl fjärr = new BasicRemote(new TV());fjärr.TogglePower(); // TV: På
RemoteControl radioFjärr = new BasicRemote(new Radio());radioFjärr.TogglePower(); // Radio: PåRemoteControl (abstraktionen) och IDevice (implementationen) kan nu utökas var för sig — en ny SmartRemote eller en ny SmartLamp kräver ingen ändring i den andra hierarkin.
TL;DR
Bridge håller “vad du gör” (abstraktionen) och “hur det faktiskt utförs” (implementationen) i två separata, oberoende hierarkier istället för en enda som växer exponentiellt.