F açade P attern By Nicolas Lanquetin
Façade Pattern Structural Pattern Bietet ein gemeinsames Interface, anstatt vieler Interfaces eines Subsystems Vereinfacht Zugriff auf das Sybsystem.
Idee Client-Klassen können über die Façade-Interface auf die Interfaces des Subsystems zugreifen.
Beteiligte Klassen Façade –weiss wofür die Subsystem-Klassen zuständig sind. –delegiert Anfragen an diese Klassen weiter. Subsystem-Klassen –kümmern sich um die Arbeit die ihnen von der Façade zugeteilt wird. –wissen garnicht dass es die Façade gibt.
Beispiel-Diagramm
// "SubSystem ClassA" class Bank { public boolean SufficientSavings(Customer c) { System.out.println("Check bank for + c.Name); /*... */ return true; } Beispiel-Code
// "SubSystem ClassB" class Credit { public boolean GoodCredit(int amount,Customer c) { System.out.println("Check credit for + c.Name); /*... */ return true; }
// "SubSystem ClassC" class Loan { public boolean GoodLoan(Customer c) { System.out.println("Check loan for + c.Name); /*... */ return true; }
class Customer { // Fields private String name; // Constructors public Customer(String name) { this.name = name; } // Properties public String Name { get {return name;} }
// "Façade" class MortgageApplication { // Fields int amount; // der Geldbetrag private Bank bank = new Bank(); private Loan loan = new Loan(); private Credit credit = new Credit(); // Constructors public MortgageApplication(int amount) { this.amount = amount; } // Methods public boolean IsEligible(Customer c) { // Kunde bankfähig? if(!bank.SufficientSavings(c)) return false; if(!loan.GoodLoan(c)) return false; if(!credit.GoodCredit(amount, c)) return false; return true; }
// Fa ç ade Client public class FacadeApp { public static void main(String[] args) { // Create Fa ç ade MortgageApplication mortgage = new MortgageApplication(125000); // Call subsystem through Fa ç ade mortgage.IsEligible( new Customer("Gabrielle McKinsey")); }
Wann wenden wir Façade an Simple Interface für komplexe Subsysteme. Einheitlicher Zugriff möglich => Subsystem ist unabhängig von Client-Klassen. Erschaffen von Layers: Alle Subsysteme sind über ihre Façade- Interface ansprechbar => Übersichtlicher Portieren (z.B. zu anderen OS) erleichtert.
Quellen Bsp-Code: