199 votes

Quel est le design pattern de façade?

Est-ce que facade est une classe qui contient beaucoup d'autres classes?

Qu'est-ce qui en fait un modèle de conception? Pour moi, c'est comme une classe normale.

Pouvez-vous m'expliquer ce modèle de conception Facade ?

8 votes

Chaque modèle de conception est dans son implémentation un ensemble de classes.

1 votes

Le patron de façade crée une interface facile à utiliser en cachant plusieurs interfaces dans une seule classe. Cet article a plus de détails.

0 votes

Bien expliqué dans ce poste programmerzdojo.com/java-tutorials/…

199voto

Unmesh Kondolikar Points 4744

Un patron de conception est une manière courante de résoudre un problème récurrent. Les classes dans tous les patrons de conception ne sont que des classes normales. Ce qui est important, c'est comment elles sont structurées et comment elles travaillent ensemble pour résoudre un problème donné de la meilleure manière possible.

Le patron de conception Façade simplifie l'interface vers un système complexe, car il est généralement composé de toutes les classes qui constituent 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 une vue simplifiée de celui-ci qui est facile à utiliser. Elle désolidarise également le code qui utilise le système des détails des sous-systèmes, facilitant ainsi la modification du système ultérieurement.

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

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

De plus, ce qui est important lors de l'apprentissage des patrons de conception, c'est d'être capable de reconnaître quel patron convient à votre problème donné et de l'utiliser de manière appropriée. Il est très courant de mal utiliser un patron ou d'essayer de l'appliquer à un problème juste parce que vous le connaissez. Soyez conscient de ces pièges lors de l'apprentissage/utilisation des patrons de conception.

11 votes

@kevin: Savoir quand les utiliser est la partie la plus difficile. En théorie, les modèles peuvent être faciles, mais à mon avis, ils sont difficiles en pratique. Vous ne pouvez apprendre cela que par l'expérience, c'est-à-dire en codant, codant, codant.

0 votes

Le modèle de conception de façade est également toujours utilisé pour masquer l'implémentation de la classe de détail et fournir en toute sécurité l'API publique.

33 votes

$ en jQuery est juste un simple exemple du modèle de conception de facade qui fournit une interface simple et cache toute la complexité

106voto

egezer Points 1487

Wikipédia propose un excellent exemple du patron de conception Façade.

/* Parties complexes */

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) { ... }
}

/* Façade */

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

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

    public void start() {
        processeur.freeze();
        ram.load(ADRESSE_DE_BOOT, hd.read(SECTEUR_DE_BOOT, TAILLE_SECTEUR));
        processeur.jump(ADRESSE_DE_BOOT);
        processeur.execute();
    }
}

/* Client */

class You {
    public static void main(String[] args) {
        ComputerFacade ordinateur = new ComputerFacade();
        ordinateur.start();
    }
}

7 votes

C'est un bon exemple. Un client doit être en mesure de comprendre toutes les étapes d'une façade s'il le souhaite, rien ne devrait être caché par des méthodes privées.

2 votes

À mon avis, cet exemple n'est pas bon car il ne met pas l'accent sur le cas d'utilisation. L'exemple montre simplement, comme l'a dit TO, une classe régulière. L'association au matériel est une composition. Peut-être un peu trop pour l'exemple sur le wiki, mais l'utilisation de l'injection de dépendance au lieu d'instancier les sous-modules mettrait en évidence l'intention et éviterait peut-être la confusion de TO.

0 votes

Voici un exemple étonnant car il résume des milliers de mots en quelques mots pour comprendre le concept lui-même. Le reste ne sont que les détails autour des différents scénarios que l'on peut rencontrer (bien sûr, un modèle de conception ne peut jamais couvrir tous les scénarios).

44voto

Aravind Points 1196

Comme expliqué dans la réponse précédente, cela fournit une interface simple au client consommateur. Par exemple : "regarder ESPN" est la fonction prévue. Mais cela implique plusieurs étapes comme :

  1. Allumer la télévision si nécessaire ;
  2. Vérifier que le satellite / câble fonctionne ;
  3. Passer à ESPN si nécessaire.

Mais la façade simplifiera cela et fournira simplement la fonction "regarder ESPN" au client.

30voto

KaviK Points 149

La façade cache les complexités du système et fournit une interface au client à partir de laquelle le client peut accéder au système.

public class Inventory {
public String checkInventory(String OrderId) {
    return "Inventaire vérifié";
}
}

public class Payment {
public String deductPayment(String orderID) {
    return "Paiement déduit avec succès";
}
}

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("Étapes suivantes complétées:" + step1
                    + " & " + step2);
   }
}

public class Client {
       public static void main(String args[]){
         OrderFacade orderFacade = new OrderFacade();
         orderFacade.placeOrder("OR123456");
         System.out.println("Traitement de la commande terminé");
       }
  }

0 votes

Est-il permis aux sous-systèmes de communiquer entre eux sans passer par le OrderFacade? Dans votre exemple, entre Paiement et Inventaire?

11voto

llMll Points 193

Une façade ne doit pas être décrite comme une classe qui contient beaucoup d'autres classes. C'est en fait une interface vers ces classes et devrait rendre l'utilisation des classes plus facile, sinon la classe de façade est inutile.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X