Uzorak mosta na Javi

1. Pregled

Službena definicija uzorka dizajna mosta koju je uveo Gang of Four (GoF) jest odvajanje apstrakcije od njezine provedbe tako da se ta dva mogu neovisno razlikovati.

To znači stvoriti most sučelje koje koristi OOP principe za razdvajanje odgovornosti u različite apstraktne klase.

2. Primjer uzorka mosta

Za uzorak Mosta razmotrit ćemo dva sloja apstrakcije; jedan je geometrijski oblik (poput trokuta i kvadrata) koji je ispunjen različitim bojama (naš drugi sloj apstrakcije):

Prvo ćemo definirati sučelje u boji:

javno sučelje Boja {String fill (); }

Sada ćemo stvoriti konkretnu klasu za ovo sučelje:

javna klasa Blue implementira Color {@Override public String fill () {return "Boja je plava"; }}

Stvorimo sad sažetak Oblik klasa koja se sastoji od reference (mosta) na Boja objekt:

javni sažetak klase Oblik {zaštićena boja u boji; // standardni konstruktori sažetak public String draw (); }

Sad ćemo stvoriti konkretnu klasu Oblik sučelje koje će koristiti metodu iz Boja sučelje:

javni razred Square produžuje se Shape {javni trg (boja u boji) {super (boja); } @Override public String draw () {return "Ucrtani kvadrat." + Color.fill (); }}

Za ovaj obrazac vrijedi sljedeća tvrdnja:

@Test public void whenBridgePatternInvoked_thenConfigSuccess () {// kvadrat crvene boje Oblik kvadrat = novi kvadrat (novi Crveni ()); assertEquals (square.draw (), "Ucrtani kvadrat. Boja je crvena"); }

Ovdje koristimo uzorak mosta i prosljeđujemo željeni objekt boje. Kao što možemo primijetiti u izlazu, oblik dobiva crteže sa željenom bojom:

Ucrtani kvadrat. Boja: nacrtan crveni trokut. Boja: plava

3. Zaključak

U ovom smo članku pogledali uzorak dizajna mosta. Ovo je dobar izbor u sljedećim slučajevima:

  • Kada želimo da roditeljska apstraktna klasa definira skup osnovnih pravila, a konkretne klase da dodaju dodatna pravila
  • Kada imamo apstraktnu klasu koja ima referencu na objekte i ima apstraktne metode koje će biti definirane u svakoj od konkretnih klasa

Potpuni izvorni kod za ovaj primjer dostupan je na GitHubu.