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 ?
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 ?
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.
@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.
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.
$ en jQuery est juste un simple exemple du modèle de conception de facade qui fournit une interface simple et cache toute la complexité
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();
}
}
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.
À 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.
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 :
Mais la façade simplifiera cela et fournira simplement la fonction "regarder ESPN" au client.
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é");
}
}
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.
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/…
0 votes
J'ai dû mettre un pouce vers le bas car cela ne montre pas d'effort de recherche.
1 votes
@RoyTruelove, fais ce que tu veux. Peu importe tant qu'il y a des réponses de soutien pour la question. Une réponse de soutien pour la question ?