Bromønsteret i Java

1. Oversigt

Den officielle definition for Bridge design mønster introduceret af Gang of Four (GoF) er at afkoble en abstraktion fra dens implementering, så de to kan variere uafhængigt.

Dette betyder at skabe en brogrænseflade, der bruger OOP-principper til at adskille ansvar i forskellige abstrakte klasser.

2. Bromønstereksempel

For Bridge-mønsteret overvejer vi to abstraktionslag; den ene er den geometriske form (som trekant og firkant), der er fyldt med forskellige farver (vores andet abstraktionslag):

Først definerer vi en farvegrænseflade:

offentlig grænseflade Farve {Strengfyld (); }

Nu opretter vi en konkret klasse til denne grænseflade:

offentlig klasse Blå redskaber Farve {@ Override offentlig Strengfyldning () {return "Farve er blå"; }}

Lad os nu oprette et abstrakt Form klasse, der består af en reference (bro) til Farve objekt:

offentlig abstrakt klasse Form {beskyttet Farve farve; // standard konstruktører abstrakt offentlig streng tegning (); }

Vi opretter nu en konkret klasse af Form interface, der vil bruge metoden fra Farve interface også:

offentlig klasse Firkant udvider form {offentlig firkant (farvefarve) {super (farve); } @ Override public String draw () {return "Square draw." + Color.fill (); }}

For dette mønster vil følgende påstand være sandt:

@Test offentligt ugyldigt nårBridgePatternInvoked_thenConfigSuccess () {// en firkant med rød farve Form firkant = ny firkant (ny rød ()); assertEquals (kvadrat.draw (), "Kvadrattegnet. Farve er rødt"); }

Her bruger vi Bridge-mønsteret og sender det ønskede farveobjekt. Som vi kan bemærke i output, får formen tegninger med den ønskede farve:

Firkantet tegnet. Farve: Rød trekant tegnet. Farve: Blå

3. Konklusion

I denne artikel kiggede vi på brodesignmønsteret. Dette er et godt valg i følgende tilfælde:

  • Når vi ønsker, at en overordnet abstrakt klasse skal definere sættet med grundlæggende regler, og de konkrete klasser skal tilføje yderligere regler
  • Når vi har en abstrakt klasse, der har en henvisning til objekterne, og den har abstrakte metoder, der vil blive defineret i hver af de konkrete klasser

Den fulde kildekode til dette eksempel er tilgængelig på GitHub.