2017-02-20 7 views

Antwort

7

Nein, ich bin nicht das Gleiche. Für die Implementierung Fassadenentwurf Muster ist nicht erforderlich, um eine Schnittstelle zu implementieren. Es stellt lediglich eine neue Ebene für die Kommunikation mit Ihren Diensten bereit, z. B. Beispiel.

class ServiceFacade() { 
    private Service1 service1; 
    private Service2 service2; 

    public void update(Entity entity){ 
     service1.update(entity); 
     service2.update(entity); 
    } 
} 

So gibt es Ihnen einen Punkt, um mit allen Diensten zu kommunizieren, die verwandt sind. Anstatt service1.update() und service2.update() aufzurufen, rufen Sie einfach facade.update() an, damit Sie sicher sind, dass beide Dienste die Entität aktualisieren.

Ein weiteres Beispiel: vielleicht die ganze Zeit service ist aktualisiert müssen Sie refresh() Sie zwischenspeichern. Dies kann auch in Ihrer Fassade incapsulate sein:

public void update(Entity entity) { 
    service.update(entity); 
    cache.refresh(); 
} 

Wenn Ihre Fassadenklasse nur eine Abhängigkeit hat, aber Sie wollen die Funktionalität dieser Abhängigkeit zu erweitern, Sie, dass durch die Umsetzung Dekorierermuster erreichen können. Hier müssen Sie die Schnittstelle implementieren. Schauen wir uns das folgende Beispiel an. Angenommen, Sie haben einen service und Sie wollen es mit einem einfachen Cache

class CachedService implement Service { 
    private Service service; 
    CachedService(Service service, Cache cache){ 
     ...... 
    } 
    ...... 

    private Entity get(Long id) { 
     Entity cachedEntity = cache.get(id); 
     if (cachedEntity != null){ 
      return cachedEntity; 
     } 
     return service.get(id); 
    } 
} 
+0

Ich stimme zu. Einfach die Referenz hinzufügen, die ich immer verwende: http://www.oodesign.com/ – bpedroso

+0

Danke. Also können wir sagen, dass Schnittstelle eine Art ist, "Fassadenmuster" zu verwenden? –

+0

@KaushikLele Wenn Ihre Fassadenklasse dieselbe Schnittstelle wie der darin enthaltene Dienst implementiert, handelt es sich eher um ein Decorator-Muster –

1

Fassade ist ein konzeptionelles Design-Muster zu erweitern. Es gibt keine spezifische Schnittstelle oder Implementierung.

Es ist nur eine zusätzliche Ebene, auf der Sie Operationen implementieren, die andernfalls die oberen Schichten dazu zwingen würden, für sich selbst irrelevante Implementierungsdetails zu verstehen und mit ihnen gekoppelt zu werden. Eine Fassadenmethode könnte beispielsweise ein Kreditkartenzahlungsprozess sein, bei dem Sie viele Anfragen senden und ihre Antworten verarbeiten müssen, um das Abrechnungsergebnis in einer Datenbank zu speichern.

Ohne eine Fassadenmethode muss jeder Teil Ihres Systems, auf dem Sie eine Zahlung mit einer Kreditkarte durchführen müssen, diese 5-10 Codezeilen noch einmal wiederholen. Irgendwann finden Sie, dass Sie einen zusätzlichen Schritt benötigen, wenn Sie diese Operationen ausführen, und Sie erkennen, dass Sie Tausende Codezeilen umgestalten müssen. Das heißt, Ihre Lösung könnte eine Sicherheitslücke aufweisen und Sie werden nicht in der Lage sein, rechtzeitig auf die Sicherheitsüberprüfung zu reagieren. Eine Fassade kann den Unterschied machen, von einem schlechten Softwareanbieter zu einem ernsthaften und robusten zu sein!

In der entgegengesetzten Seite, wenn Sie Fassaden, richtige implementieren, wenn einige Schicht eine Kreditkartenzahlung durchführen muss es nur spritzt eine Abrechnungs Fassade und es bleibt Agnostiker darüber, wie die Abrechnungsprozess daher gemacht wird Sie wiederholen sich nicht in vielen Teilen Ihres Systems und das Refactoring ist keine langwierige und zeitraubende Aufgabe.

Während Fassadenmuster nicht definiert eine Schnittstelle per se, Fassaden sollten als Schnittstellen definiert werden, da sie auch als Stellvertreter fungieren kann: eine Implementierung Verwendung der Dienstschicht machen könnte direkt und andere eine nennen könnte RESTful API, um die gleiche Aufgabe auszuführen, abhängig von Wer benötigt die Fassade selbst.

Wie auch immer, dieses Designmuster ist nicht spezifisch für die Vereinfachung einer gegebenen Service-Schicht. Sie könnten eine Fassadenmethode eine Methode betrachten, die eine komplexe String-Manipulation vereinfachen kann, die viele reguläre Ausdrücke, Ersetzungen und Einfügungen beinhaltet.

1

Facade verbirgt die Komplexität des Systems und bietet eine Schnittstelle zum Client, von wo aus der Client auf das System zugreifen kann, was bedeutet, dass Facade Low-Level-Funktionalität vom Client versteckt.

Wird diese Schnittstelle Java-Schnittstelle sein, liegt es an Ihnen.

0

Gute Frage. Ich wurde einmal in einem Interview gefragt, welches Designmuster ein Interface darstellt, und meine beste Vermutung war Facade. Ich weiß allerdings nicht genau, worauf der Interviewer zu sprechen versuchte.