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.