Qu'est-ce que la Façade Modèle de Conception?

Est Façade une classe qui contient beaucoup d'autres classes?

Qu'est-ce qui en fait un motif? Pour moi, c'est comme une classe normale.

pouvez-vous m'expliquer ce façade motif?

164
demandé sur LolPython 2011-03-09 10:04:30

19 réponses

un modèle de conception est une façon courante de résoudre un problème récurrent. Classes dans tous les modèles de conception sont juste des classes normales. Ce qui est important est de savoir comment ils sont structurés et comment ils travaillent ensemble pour résoudre un problème donné dans la meilleure façon possible.

le façade dessin simplifie l'interface à un système complexe; parce qu'il est généralement composé de toutes les classes qui composent les sous-systèmes du système complexe.

une façade protège l'Utilisateur des détails complexes du système et lui fournit un simplified view de celui-ci qui est easy to use . Il est également decouples le code qui utilise le système à partir des détails des sous-systèmes, ce qui rend plus facile de modifier le système plus tard.

http://www.dofactory.com/Patterns/PatternFacade.aspx

http://www.blackwasp.co.uk/Facade.aspx

en outre, ce qui est important tout en apprenant les modèles de conception est d'être en mesure de reconnaître quel modèle correspond à votre problème donné et ensuite l'utiliser de manière appropriée. C'est une chose très courante d'abuser d'un modèle ou d'essayer de l'adapter à un problème juste parce que vous le savez. Soyez conscient de ces pièges tout en apprenant\en utilisant des modèles de conception.

163
répondu Unmesh Kondolikar 2013-11-27 22:55:48

Wikipedia a un grand exemple de motif de façade.

/* Complex parts */

class CPU {
    public void freeze() { ... }
    public void jump(long position) { ... }
    public void execute() { ... }
}

class Memory {
    public void load(long position, byte[] data) { ... }
}

class HardDrive {
    public byte[] read(long lba, int size) { ... }
}

/* Facade */

class ComputerFacade {
    private CPU processor;
    private Memory ram;
    private HardDrive hd;

    public ComputerFacade() {
        this.processor = new CPU();
        this.ram = new Memory();
        this.hd = new HardDrive();
    }

    public void start() {
        processor.freeze();
        ram.load(BOOT_ADDRESS, hd.read(BOOT_SECTOR, SECTOR_SIZE));
        processor.jump(BOOT_ADDRESS);
        processor.execute();
    }
}

/* Client */

class You {
    public static void main(String[] args) {
        ComputerFacade computer = new ComputerFacade();
        computer.start();
    }
}
83
répondu egezer 2014-12-11 15:12:24

comme expliqué dans la réponse précédente, il fournit une interface simple pour le client consommateur. Par exemple:" watch ESPN " est la fonction prévue. Mais il implique plusieurs étapes comme:

  1. allumer la télévision si nécessaire;
  2. Vérifier le fonctionnement du satellite/câble;
  3. passer à ESPN si nécessaire.

mais la façade va simplifier cela et juste fournir la fonction" watch ESPN " à la client.

35
répondu Aravind 2015-02-08 17:10:29

façade cache les complexités du système et fournit une interface au client d'où le client peut accéder au système.

public class Inventory {
public String checkInventory(String OrderId) {
    return "Inventory checked";
}
}

public class Payment {
public String deductPayment(String orderID) {
    return "Payment deducted successfully";
}
}


public class OrderFacade {
private Payment pymt = new Payment();
private Inventory inventry = new Inventory();

public void placeOrder(String orderId) {
    String step1 = inventry.checkInventory(orderId);
    String step2 = pymt.deductPayment(orderId);
    System.out
            .println("Following steps completed:" + step1
                    + " & " + step2);
   }
}

public class Client {
       public static void main(String args[]){
         OrderFacade orderFacade = new OrderFacade();
         orderFacade.placeOrder("OR123456");
         System.out.println("Order processing completed");
       }
  }
27
répondu KaviK 2015-02-08 17:12:28

Une façade ne doit pas être décrit comme une classe qui contient beaucoup d'autres classes. C'est en fait une interface pour ces classes et devrait faciliter l'utilisation des classes sinon la classe façade est inutile.

10
répondu llMll 2011-03-09 07:12:41

une explication courte et simple:

  • motif de façade fournit une interface unifiée à un ensemble d'interface(s) dans un sous-système.
  • façade définit une interface de haut niveau qui rend le sous-système plus facile à utiliser.

essayer de comprendre le scénario avec et sans Façade:

Si vous souhaitez transférer l'argent de accout1 au compte 2, alors les deux sous-systèmes à invoquer retirez - vous du compte 1 et déposez-les au compte 2.

with and without facade

7
répondu Arun Raaj 2018-04-04 08:18:06

le motif de façade est un enveloppement de beaucoup d'autres interfaces dans un résultat pour produire une interface plus simple.

Les modèles de conception

sont utiles car ils résolvent des problèmes récurrents et simplifient généralement le code. Dans une équipe de développeurs qui acceptent d'utiliser les mêmes modèles, il améliore l'efficacité et la compréhension lors de la maintenance du code les uns des autres.

essayez de lire plus de modèles:

Façade Motif: http://www.dofactory.com/Patterns/PatternFacade.aspx#_self1

ou plus généralement: http://www.dofactory.com/Patterns/Patterns.aspx

6
répondu Aim Kai 2011-03-09 07:21:30

une autre utilisation du motif de Façade pourrait être de réduire la courbe d'apprentissage de votre équipe. Permettez-moi de vous donner un exemple:

supposons que votre application doit interagir avec MS Excel en utilisant le modèle D'objet COM fourni par Excel. Un des membres de votre équipe connaît tous les API Excel et il crée une façade dessus, qui remplit tous les scénarios de base de l'application. Aucun autre membre de l'équipe n'a besoin de passer du temps à apprendre Excel API. L'équipe peut utiliser la façade sans connaître les intérieurs ou tous les objets MS Excel impliqués dans l'exécution d'un scénario. N'est-il pas grand?

ainsi, il fournit une interface simplifiée et unifiée au-dessus d'un sous-système complexe.

5
répondu Anand Patel 2011-03-16 10:19:12

une façade expose des fonctions simplifiées qui sont la plupart du temps appelées et la mise en œuvre dissimule la complexité que les clients auraient autrement à traiter. En général, l'implémentation utilise plusieurs paquets, classes et fonctions. Des façades bien écrites rendent l'accès direct aux autres classes rare. Par exemple, lorsque je visite un guichet automatique bancaire et que je retire un certain montant. Le distributeur se cache s'il va directement à la banque Propriétaire ou s'il passe sur un réseau négocié pour un externe banque. L'ATM agit comme une façade consommant plusieurs appareils et sous-systèmes avec lesquels je n'ai pas à traiter directement en tant que client.

5
répondu ManojPatra 2013-03-26 18:29:58

en ce qui concerne vos questions:

Façade Est une classe qui contient beaucoup d'autres classes?

Oui. C'est une enveloppe pour de nombreux sous-systèmes en application.

Qu'est-ce qui en fait un motif? Pour moi, c'est comme une classe normale

tous les modèles aussi sont des classes normales. @ Unmesh Kondolikar à juste titre répondu cette requête.

pouvez-vous m'expliquer à propos de cette façade, je suis nouveau à concevoir des modèles.

, Selon le GoF, Façade modèle de conception est defind comme :

fournit une interface unifiée à un ensemble d'interfaces dans un sous-système. Facade Pattern définit une interface de niveau supérieur qui rend le sous-système plus facile à utiliser

le Façade modèle est généralement utilisé lorsque:

  1. une interface simple est nécessaire pour accéder à un système complexe.
  2. les abstractions et les implémentations d'un sous-système sont étroitement liées.
  3. ont besoin d'un point d'entrée à chaque niveau de logiciel stratifié.
  4. Le système
  5. est très complexe ou difficile à comprendre.

prenons un vrai mot exemple de site cleartrip .

ce site Web offre des options pour réserver

  1. vols
  2. Hôtels
  3. Vols + Hôtels
"151970920 extrait de Code":

import java.util.*;

public class TravelFacade{
    FlightBooking flightBooking;
    TrainBooking trainBooking;
    HotelBooking hotelBooking;

    enum BookingType {
        Flight,Train,Hotel,Flight_And_Hotel,Train_And_Hotel;
    }; 

    public TravelFacade(){
        flightBooking = new FlightBooking();
        trainBooking = new TrainBooking();
        hotelBooking = new HotelBooking();        
    }
    public void book(BookingType type, BookingInfo info){
        switch(type){
            case Flight:
                // book flight;
                flightBooking.bookFlight(info);
                return;
            case Hotel:
                // book hotel;
                hotelBooking.bookHotel(info);
                return;
            case Train:
                // book Train;
                trainBooking.bookTrain(info);
                return;
            case Flight_And_Hotel:
                // book Flight and Hotel
                flightBooking.bookFlight(info);
                hotelBooking.bookHotel(info);
                return;
             case Train_And_Hotel:
                // book Train and Hotel
                trainBooking.bookTrain(info);
                hotelBooking.bookHotel(info);
                return;                
        }
    }
}
class BookingInfo{
    String source;
    String destination;
    Date    fromDate;
    Date     toDate;
    List<PersonInfo> list;
}
class PersonInfo{
    String name;
    int       age;
    Address address;
}
class Address{

}
class FlightBooking{
    public FlightBooking(){

    }
    public void bookFlight(BookingInfo info){

    }
}
class HotelBooking{
    public HotelBooking(){

    }
    public void bookHotel(BookingInfo info){

    }
}
class TrainBooking{
    public TrainBooking(){

    }
    public void bookTrain(BookingInfo info){

    }
}

explication:

  1. FlightBooking, TrainBooking and HotelBooking sont différents sous-systèmes de grand système: TravelFacade

  2. TravelFacade offre une interface simple pour réserver l'une des options ci-dessous

    Flight Booking
    Train Booking 
    Hotel Booking
    Flight + Hotel booking 
    Train + Hotel booking
    
  3. livre de l'API de TravelFacade appelle en interne ci-dessous Api de sous-systèmes

    flightBooking.bookFlight
    trainBooking.bookTrain(info);
    hotelBooking.bookHotel(info);
    
  4. de cette façon, TravelFacade fournit plus simple et plus facile API avec-Out exposer sous-système d'Api.

plats à emporter Clés : ( à partir de journaldev article par Pankaj Kumar )

  1. Façade est plus comme un helper pour les applications client
  2. motif de façade peut être appliqué à tout point de développement, généralement lorsque le nombre d'interfaces grandir et le système devient complexe x.
  3. les interfaces du sous-système ne sont pas au courant de la façade et elles ne devraient pas avoir de référence de L'interface de la façade
  4. Façade modèle devrait être appliquée pour le même genre d'interfaces , son but est de fournir une interface unique plutôt que plusieurs interfaces qui ne l'similaires types d'emplois

regarder sourcemaking article trop pour une meilleure compréhension.

5
répondu Ravindra babu 2017-09-25 17:48:24

une façade est une classe avec un niveau de fonctionnalité qui se situe entre une boîte à outils et une application complète, offrant une utilisation simplifiée des classes dans un paquet ou un sous-système. L'intention du motif de façade est de fournir une interface qui rend un sous-système facile à utiliser. -- Extrait de livre Patrons de Conception en C#.

4
répondu Sean Hunter 2011-03-09 07:19:32

façade examine l'encapsulation d'un sous-système complexe à l'intérieur d'un seul objet d'interface. Cela réduit la courbe d'apprentissage nécessaire pour exploiter avec succès la sous-système. Il favorise également le découplage du sous-système de ses nombreux clients potentiels. D'un autre côté, si la façade est le seul point d'accès du sous-système, cela limitera les fonctionnalités et la flexibilité dont les "utilisateurs de puissance" peuvent avoir besoin.

Source: https://sourcemaking.com/design_patterns/facade

4
répondu Pang 2018-08-13 07:20:06

un autre exemple de façade: supposons que votre application se connecte à la base de données et affiche les résultats sur L'interface utilisateur. Vous pouvez utiliser façade pour rendre votre application configurable, comme dans Exécuter en utilisant la base de données ou avec des objets mock. Vous ferez donc tous les appels de la base de données à la classe facade, où elle lira l'application config et décidera de lancer la requête db ou de retourner l'objet simulé. de cette façon, l'application devient db indépendante dans le cas où db est pas disponible.

3
répondu aishu 2013-02-04 07:02:52

un modèle de conception est une solution réutilisable générale à un problème courant dans un contexte donné de la conception du logiciel.

le motif de la façade est un motif structural puisqu'il définit une manière de créer des relations entre classes ou entités. Le dessin de la façade est utilisé pour définir une interface simplifiée à un sous-système plus complexe.

le dessin de la façade est idéal quand on travaille avec un grand nombre d'interdépendants classes, ou avec des classes qui nécessitent l'utilisation de plusieurs méthodes, en particulier quand ils sont compliqués à utiliser ou difficile à comprendre. La classe façade est un "wrapper" qui contient un ensemble de membres faciles à comprendre et à utiliser. Ces membres accèdent au sous-système pour le compte de l'utilisateur facade, cachant les détails de la mise en œuvre.

le dessin de la façade est particulièrement utile pour envelopper des sous-systèmes mal conçus mais qui ne peuvent pas être refactorisé parce que le code source n'est pas disponible ou que l'interface existante est largement utilisée. Parfois, vous pouvez décider de mettre en œuvre plus d'une façade pour fournir des sous-ensembles de fonctionnalités à des fins différentes.

un exemple d'utilisation du motif de façade est pour l'intégration d'un site Web avec une application commerciale. Le logiciel existant peut inclure de grandes quantités de logique d'entreprise qui doivent être accessibles d'une manière particulière. Le site web peut ne nécessiter qu'un accès limité: cette logique commerciale. Par exemple, il se peut que le site web doive indiquer si un article à vendre a atteint un niveau de stock limité. La méthode IsLowStock de la classe de façade pourrait retourner une valeur booléenne pour l'indiquer. Dans les coulisses, cette méthode pourrait cacher les complexités du traitement du stock physique actuel, du stock entrant, des articles alloués et le faible niveau de stock pour chaque article.

3
répondu Program-Me-Rev 2015-02-08 16:59:47

Il ya un très bon exemple de la vie réelle du modèle- le moteur de démarrage de la voiture .

en tant que pilotes, on allume la clé et la voiture démarre. Aussi simple que possible. En coulisse, de nombreux autres systèmes de voiture (batterie, moteur, carburant, etc.), afin que la voiture démarre avec succès, mais ils sont cachés derrière le démarreur.

comme vous pouvez le voir, le démarreur de voiture est la façade. Il nous donne facile à utiliser l'interface, sans se soucier de la complexité de tous les autres systèmes de voiture.

résumons:

le motif de façade simplifie et cache la complexité des grands blocs de code ou API, fournissant une interface plus propre, compréhensible et facile d'utilisation.

3
répondu Jordan Enev 2018-07-31 13:39:01

tous les modèles sont des classes disposées d'une manière ou d'une autre qui convient à une application spécifique. Le but du motif de façade est de cacher la complexité d'une opération ou des opérations. Vous pouvez voir un exemple et apprendre le motif de façade de http://preciselyconcise.com/design_patterns/facade.php

2
répondu Sai Sunder 2014-05-09 17:06:29

il s'agit essentiellement d'un système de dédouanement à guichet unique.Vous assignez n'importe quel travail qu'il déléguera à la méthode particulière dans une autre classe.

1
répondu Saurabh 2014-07-10 06:47:53

le dessin de la façade relève du dessin de la structure. En bref Façade signifie l'apparence extérieure. Cela signifie que dans le dessin de façade nous cachons quelque chose et ne montrons que ce que le client exige réellement. Lire plus sur le blog ci-dessous: http://www.sharepointcafe.net/2017/03/facade-design-pattern-in-aspdotnet.html

1
répondu user1694660 2017-08-12 16:36:02

le motif de façade fournit une interface unifiée au groupe d'interface du sous-système. La façade définit une interface de haut niveau, qui simplifie le travail avec le sous-système.

1
répondu Taras Melnyk 2018-01-20 18:49:00