Ce este
Șablonul Bridge (Punte) împarte un concept în două dimensiuni independente, ca ele să poată varia separat. Forme și moduri de a le desena; mesaje și moduri de a le trimite.
Fără punte ajungi la o clasă pentru fiecare combinație — VectorCircle, TextCircle, VectorSquare... — și lista se înmulțește. Cu puntea, o parte ține o interfață către cealaltă: orice formă funcționează cu orice randare.
Exemplu: forme și randări
2 randări × 2 forme ar însemna 4 clase combinate; aici sunt 2 + 2, legate printr-o singură proprietate de tip interfață — puntea.
Orice formă, orice randare
Același cerc se desenează în două moduri doar prin faptul că ține o altă randare. Adăugarea unei randări sau a unei forme adaugă o clasă, niciodată un rând întreg de combinații.
Ieșire: script PHP
<?php
// O dimensiune: CUM se desenează.
interface Renderer {
public function draw(string $name): string;
}
class VectorRenderer implements Renderer {
public function draw(string $name): string {
return "se desenează " . $name . " cu linii vectoriale netede";
}
}
class TextRenderer implements Renderer {
public function draw(string $name): string {
return "se desenează " . $name . " cu caractere text";
}
}
// Cealaltă dimensiune: CE se desenează. Proprietatea renderer este puntea.
class Shape {
public function __construct(
private string $name,
private Renderer $renderer,
) {}
public function draw(): string {
return $this->renderer->draw($this->name);
}
}
$shapes = [
new Shape("circle", new VectorRenderer()),
new Shape("circle", new TextRenderer()),
new Shape("square", new VectorRenderer()),
];
foreach ($shapes as $s) {
echo $s->draw(), "\n";
}
Când se folosește
Folosește-l când observi o explozie de combinații: fiecare tip nou pe o axă obligă la clase noi pe cealaltă. Două axe independente — separă-le.
Renunță când o dimensiune are exact o singură implementare. O punte spre un singur mal este doar un ponton.
Avantaje și dezavantaje
Avantaje: cele două părți cresc independent; combinațiile vin gratis; fiecare parte poate fi testată singură.
Dezavantaje: mai multă indirectare de la început; recunoașterea timpurie a celor două axe este cu adevărat greu — o separare prea timpurie creează o abstracție de care nimeni nu are nevoie.