Java-Entwurfsmuster (design patterns): Facade

Heute werfen wir einen Blick auf das nächste Entwurfsmuster (Java design patterns) aus der Kategorie der strukturellen Muster (structural patterns) – Facade. Entwurfsmuster in dieser Kategorie befassen sich mit Klassenstrukturen wie Vererbung (inheritance) und Komposition (composition).

Was ist das Entwurfsmuster Facade?

Facade ist ein Entwurfsmuster, das eine vereinfachte Schnittstelle für die Interaktion mit einem komplexen System bietet, das aus mehreren Klassen, Schnittstellen und Komponenten bestehen kann. Es wird oft in Verbindung mit dem Entwurfsmuster Singleton verwendet.

Was für ein Problem löst das Entwurfsmuster Facade?

Das Entwurfsmuster Facade löst das Komplexitätsproblem, indem es eine einfache, einheitliche Schnittstelle als Ansatz für den Klienten bereitstellt, die die Details im Inneren des Systems verbirgt, das aufgrund der vielen Klassen und Abhängigkeiten schwer zu verstehen und zu navigieren ist. Der Vorteil des Entwurfmusters Facade ist auch, dass das komplexe System verändert werden kann, unabhängig vom Kunden, der nur über die Fassade kommuniziert.

Beispiel einer Facade-Implementierung in Java

Jetzt werden wir ein Programm schreiben, um die Eigenschaften der gegebenen Zahlen zu testen. Dabei verwenden wir das Entwurfsmuster Facade, um die Komplexität der Berechnungen vor dem Benutzer zu verbergen. Die Klasse SystemA enthält die Methode isPrvocislo(), die feststellt, ob die angegebene Zahl eine Primzahl ist. Eine Primzahl ist eine Zahl größer als 1, die keine anderen Teiler außer 1 und sich selbst hat. 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;
    }
}

Die Klasse SystemB enthält die Methode jeFibonacihoCislo(), die überprüft, ob eine gegebene Zahl ein Mitglied der Fibonacci-Folge ist. Die Fibonacci-Folge ist so beschaffen, dass jede Zahl in der Folge die Summe der beiden vorangehenden Zahlen ist (z. B. 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 enthält die Methode Odmocnitelne(), die feststellt, ob die angegebene Zahl quadratwurzelfrei sein kann. Die Quadratwurzel ist eine Zahl, die mit sich selbst multipliziert die ursprüngliche Zahl ergibt. 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;
    }
}

Die Klasse Facade kombiniert die vorhergehenden Systeme und ihre Methoden über die Methode komplexnaOperacia(), die die angegebene Zahl analysiert und das Ergebnis als Textstring zurückgibt. Facaade.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();
    }
}

Die Main-Klasse ist der Einstiegspunkt des Programms. Erzeugt eine Instanz der Fassade und nennt deren Methode komplexnaOperacia() auf jeder gegebenen Zahl. In diesem Beispiel setzen wir die Zahl auf 1. Das Ergebnis dieser Operation wird dann auf der Konsole angezeigt. 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);
    }
}
Výstup z tohto príkladu Main.java
Die Ausgabe des Beispiels Main.java

Zusammenfassung

Das Entwurfsmuster Facade wird verwendet, wenn wir komplizierten und schwer verständlichen Code komplexer Systeme verbergen müssen. Durch die Einbettung einer Fassade zwischen dem Klienten und dem System kann der Klient leicht mit der Fassade interagieren, die sicherstellt, dass komplexe Operationen korrekt aufgerufen werden und die Details des Systems verbirgt. Wir haben die Dateien mit dem obigen Beispiel in Form von Code vorbereitet, den du direkt in Java ausführen kannst. Lade den Java Code Facade hier herunter. Beherrschst du die Programmiersprache Java? Wenn du als Java Entwickler auf der Suche nach einem Job bist, informiere dich über unsere Mitarbeiterbenefits und reagiere auf unsere aktuellen Stellenangebote.

Über den Autor

Jozef Wagner

Java Developer Senior

Viac ako 10 rokov programujem v Jave, momentálne pracujem v msg life Slovakia ako Java programátor senior a pomáham zákazníkom implementovať ich požiadavky do poistného softvéru Life Factory. Vo voľnom čase si rád oddýchnem v lese, prípadne si zahrám nejakú dobrú počítačovú hru.

Informieren Sie uns über sich