A híd minta Java-ban

1. Áttekintés

A Gang of Four (GoF) által bevezetett híd tervezési mintájának hivatalos meghatározása az, hogy elválasztja az absztrakciót a megvalósítástól, hogy a kettő egymástól függetlenül változhasson.

Ez azt jelenti, hogy olyan híd interfészt kell létrehozni, amely az OOP elveit felhasználva különíti el a felelősségeket absztrakt osztályokra.

2. Hídminta példa

A Bridge minta esetében az absztrakció két rétegét vesszük figyelembe; az egyik a geometriai forma (például háromszög és négyzet), amely különböző színekkel van kitöltve (második absztrakciós rétegünk):

Először meghatározunk egy színes felületet:

nyilvános felület Szín {String fill (); }

Most létrehozunk egy konkrét osztályt ehhez a felülethez:

public class Blue végrehajtja a Színt {@Orride public String fill () {return "A szín kék"; }}

Készítsünk most egy absztraktot Alak osztály, amely hivatkozást (hidat) tartalmaz a Szín tárgy:

public absztrakt osztály Alakzat {védett szín szín; // standard konstruktorok absztrakt nyilvános String draw (); }

Most létrehozunk egy konkrét osztályt Alak interfész, amely a Szín interfész is:

a nyilvános osztály tér kiterjed Alakja {nyilvános tér (színes szín) {szuper (szín); } @Orride public String draw () {adja vissza a "Négyzetet rajzolva." + Color.fill (); }}

Ehhez a mintához a következő állítás igaz:

@Test public void whenBridgePatternInvoked_thenConfigSuccess () {// piros színű négyzet Alakzat négyzet = új Négyzet (új Piros ()); assertEquals (négyzet.rajz (), "Rajzolt négyzet. A szín piros"); }

Itt a Bridge mintát használjuk, és átadjuk a kívánt színobjektumot. Amint a kimenetben megjegyezhetjük, az alakzat a kívánt színű rajzokat kapja:

Négyzet rajzolt. Szín: Piros háromszög rajzolva. Szín: kék

3. Következtetés

Ebben a cikkben megnéztük a híd tervezési mintázatát. Ez jó választás a következő esetekben:

  • Amikor azt akarjuk, hogy egy absztrakt szülő osztály definiálja az alapszabályok halmazát, a konkrét osztályok pedig további szabályokat
  • Ha van egy absztrakt osztályunk, amely hivatkozik az objektumokra, és absztrakt metódusai vannak, amelyeket az egyes konkrét osztályokban definiálunk

A példa teljes forráskódja elérhető a GitHub oldalon.