Het brugpatroon in Java

1. Overzicht

De officiële definitie voor het Bridge-ontwerppatroon geïntroduceerd door Gang of Four (GoF) is om een ​​abstractie los te koppelen van de implementatie, zodat de twee onafhankelijk kunnen variëren.

Dit betekent dat een bridge-interface moet worden gemaakt die gebruikmaakt van OOP-principes om verantwoordelijkheden in verschillende abstracte klassen te verdelen.

2. Voorbeeld van een brugpatroon

Voor het Bridge-patroon zullen we twee abstractielagen beschouwen; de ene is de geometrische vorm (zoals driehoek en vierkant) die is gevuld met verschillende kleuren (onze tweede abstractielaag):

Eerst definiëren we een kleureninterface:

openbare interface Kleur {String fill (); }

Nu gaan we een concrete klasse maken voor deze interface:

public class Blue implementeert Color {@Override public String fill () {return "Color is Blue"; }}

Laten we nu een samenvatting maken Vorm klasse die een verwijzing (brug) naar de Kleur voorwerp:

openbare abstracte klasse Vorm {beschermd Kleur kleur; // standard constructors abstract public String draw (); }

We gaan nu een concrete klasse maken van Vorm interface die de methode van Kleur interface ook:

openbare klasse Vierkant breidt Vorm {openbaar Vierkant (Kleur kleur) {super (kleur) uit; } @Override public String draw () {return "Square getekend." + Color.fill (); }}

Voor dit patroon is de volgende bewering waar:

@Test openbare leegte whenBridgePatternInvoked_thenConfigSuccess () {// een vierkant met rode kleur Vorm vierkant = nieuw vierkant (nieuw rood ()); assertEquals (square.draw (), "Vierkant getekend. Kleur is rood"); }

Hier gebruiken we het Bridge-patroon en geven we het gewenste kleurobject door. Zoals we in de uitvoer kunnen opmerken, wordt de vorm getekend met de gewenste kleur:

Vierkant getekend. Kleur: Rode driehoek getekend. Kleur blauw

3. Conclusie

In dit artikel hebben we het ontwerppatroon van de brug bekeken. Dit is een goede keuze in de volgende gevallen:

  • Wanneer we een bovenliggende abstracte klasse willen om de set basisregels te definiëren, en de concrete klassen om aanvullende regels toe te voegen
  • Als we een abstracte klasse hebben die een verwijzing naar de objecten heeft, en deze heeft abstracte methoden die in elk van de concrete klassen zullen worden gedefinieerd

De volledige broncode voor dit voorbeeld is beschikbaar op GitHub.