Mostový vzor v Jave

1. Prehľad

Oficiálna definícia návrhového vzoru Bridge, ktorý predstavil Gang zo štyroch (GoF), je oddeliť abstrakciu od jeho implementácie, aby sa tieto dva mohli nezávisle meniť.

To znamená vytvoriť prepojovacie rozhranie, ktoré pomocou princípov OOP rozdeľuje zodpovednosti do rôznych abstraktných tried.

2. Príklad vzoru mosta

Pre vzor Bridge zvážime dve vrstvy abstrakcie; jeden je geometrický tvar (ako trojuholník a štvorec), ktorý je vyplnený rôznymi farbami (naša druhá abstrakčná vrstva):

Najskôr definujeme farebné rozhranie:

verejné rozhranie Farba {String fill (); }

Teraz pre toto rozhranie vytvoríme konkrétnu triedu:

verejná trieda Modrá implementuje farbu {@Override public String fill () {návrat "Farba je modrá"; }}

Poďme teraz vytvoriť abstrakt Tvar triedy, ktorá pozostáva z odkazu (mosta) na Farba objekt:

verejná abstraktná trieda Tvar {chránená Farba farieb; // štandardné konštruktory abstrakt public public String draw (); }

Teraz vytvoríme konkrétnu triedu Tvar rozhranie, ktoré bude využívať metódu z Farba rozhranie tiež:

public class Square extendens Shape {public Square (Color color) {super (color); } @Override public String draw () {return "Square square." + Color.fill (); }}

Pre tento vzor bude platiť nasledujúce tvrdenie:

@Test public void whenBridgePatternInvoked_thenConfigSuccess () {// štvorec s červenou farbou Tvar štvorec = nový Štvorec (nový Červený ()); assertEquals (square.draw (), "Štvorec nakreslený. Farba je červená"); }

Tu používame vzor Bridge a odovzdávame požadovaný farebný objekt. Ako si môžeme všimnúť vo výstupe, tvar dostane kresby s požadovanou farbou:

Námestie nakreslené. Farba: Červený trojuholník nakreslený. Farba: modrá

3. Záver

V tomto článku sme sa pozreli na vzor návrhu mosta. Toto je dobrá voľba v nasledujúcich prípadoch:

  • Keď chceme, aby nadradená abstraktná trieda definovala množinu základných pravidiel a konkrétne triedy pridali ďalšie pravidlá
  • Keď máme abstraktnú triedu, ktorá má odkaz na objekty, a má abstraktné metódy, ktoré budú definované v každej z konkrétnych tried

Celý zdrojový kód pre tento príklad je k dispozícii na GitHub.


$config[zx-auto] not found$config[zx-overlay] not found