Java programátor expert
Návrhové vzory Java (design patterns): Facade
Dnes sa pozrieme na ďalší návrhový vzor Facade (java design patterns) z kategórie štrukturálnych vzorov (structural patterns). Návrhové vzory v tejto kategórii sa zaoberajú štruktúrou triedy, ako je dedičnosť (inheritance) a kompozícia (composition).
Čo je návrhový vzor Facade?
Facade (fasáda) je návrhový vzor, ktorý poskytuje zjednodušené rozhranie pre komunikáciu s komplexným systémom, ktorý môže pozostávať z viacerých tried, rozhraní a komponentov. Často sa využíva spolu s návrhovým vzorom Singleton.
Aký problém návrhový vzor Facade rieši?
Facade design pattern rieši problém komplexnosti tým, že poskytuje ako prístup klientovi jednoduché unifikované rozhranie, ktoré skrýva podrobnosti o vnútri systému, ktoré môže byť kvôli množstvu tried a vzájomných závislosti ťažko pochopiteľné a ovládateľné. Výhodou fasády je tiež, že komplexný systém sa môže meniť, bez ohľadu na klienta, ktorý komunikuje iba cez fasádu.
Príklad Facade implementácie v Jave
Teraz si napíšeme program na testovanie vlastností zadaných čísel. Použijeme pritom návrhový vzor Facade, ktorý skryje komplexnosť výpočtov pred používateľom.
Trieda SystemA obsahuje metódu jePrvocislo(), ktorá zistí, či zadané číslo je prvočíslo. Prvočíslo je číslo väčšie ako 1, ktoré nemá žiadne iné delitele okrem 1 a seba samého.
SystemA.java
package designpatterns;
public class SystemA {
public boolean jePrvocislo(int cislo) {
if (cislo <= 1) {
return false;
}
for (int i = 2; i <= Math.sqrt(cislo); i++) {
if (cislo % i == 0) {
return false;
}
}
return true;
}
}
Trieda SystemB obsahuje metódu jeFibonacihoCislo(), ktorá zistí, či je zadané číslo členom postupnosti Fibonacciho. Postupnosť Fibonacciho je taká, že každé číslo v postupnosti je súčet dvoch predchádzajúcich čísel (napr. 0, 1, 1, 2, 3, 5, …).
SystemB.java
package designpatterns;
public class SystemB {
public boolean jeFibonacihoCislo(int cislo) {
int a = 0, b = 1, temp;
while (a < cislo) {
temp = a;
a = b;
b = temp + b;
}
return a == cislo;
}
}
SystemC obsahuje metódu jeOdmocnitelne(), ktorá zistí, či je zadané číslo možné odmocniť bezozvyšku. Odmocnina je číslo, ktoré vynásobené samo so sebou dáva pôvodné číslo.
SystemC.java
package designpatterns;
public class SystemC {
public boolean jeOdmocnitelne(int cislo) {
if (cislo < 0) {
return false;
}
int odmocnina = (int) Math.sqrt(cislo);
return odmocnina * odmocnina == cislo;
}
}
Trieda Fasada kombinuje predchádzajúce systémy a ich metódy prostredníctvom metódy komplexnaOperacia(), ktorá zanalyzuje zadané číslo a vráti výsledok v textovom reťazci.
Fasada.java
package designpatterns;
public class Fasada {
private SystemA systemA;
private SystemB systemB;
private SystemC systemC;
public Fasada() {
systemA = new SystemA();
systemB = new SystemB();
systemC = new SystemC();
}
public String komplexnaOperacia(int cislo) {
StringBuilder vysledok = new StringBuilder("Fasáda spúšťa analýzu čísla " + cislo + ":\n");
vysledok.append("Systém A: Je prvočíslo? ").append(systemA.jePrvocislo(cislo)).append("\n");
vysledok.append("Systém B: Je Fibonačiho číslo? ").append(systemB.jeFibonacihoCislo(cislo)).append("\n");
vysledok.append("Systém C: Dá sa číslo odmocniť? ").append(systemC.jeOdmocnitelne(cislo));
return vysledok.toString();
}
}
Main trieda je vstupným bodom programu. Vytvára inštanciu fasády a volá jej metódu komplexnaOperacia() na ľubovoľnom zadanom čísle. V tomto príklade sme nastavili číslo na 1. Výsledok tejto operácie je potom vypísaný na konzolu.
Main.java
import designpatterns.Fasada;
public class Main {
public static void main(String[] args) {
Fasada fasada = new Fasada();
// Môžeš zmeniť na akékoľvek iné číslo
int zadaneCislo = 1;
String vysledok = fasada.komplexnaOperacia(zadaneCislo);
System.out.println(vysledok);
}
}
Zhrnutie
Návrhový vzor Facade sa používa v situácii, keď potrebujeme schovať komplikovaný a ťažko zrozumiteľný kód komplexných systémov. Zabudovaním fasády medzi klienta a systém môže klient jednoducho interagovať s fasádou, ktorá zabezpečuje správne volanie komplexných operácií a skrýva detaily systému.
Pripravili sme pre teba súbory so spomínaným príkladom vo forme kódu, ktorý si môžeš spustiť priamo v Jave. Stiahni si kód Java Facade tu.
Ovládaš programovací jazyk Java? Ak hľadáš prácu ako Java programátor, pozri si naše firemné benefity a reaguj na najnovšie pracovné ponuky.