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?
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.
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();
}
}
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:
- allumer la télévision si nécessaire;
- Vérifier le fonctionnement du satellite/câble;
- passer à ESPN si nécessaire.
mais la façade va simplifier cela et juste fournir la fonction" watch ESPN " à la client.
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");
}
}
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.
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.
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 conceptionsont 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
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.
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.
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:
- une interface simple est nécessaire pour accéder à un système complexe.
- les abstractions et les implémentations d'un sous-système sont étroitement liées.
- ont besoin d'un point d'entrée à chaque niveau de logiciel stratifié. Le système
- est très complexe ou difficile à comprendre.
prenons un vrai mot exemple de site cleartrip .
ce site Web offre des options pour réserver
- vols
- Hôtels
- Vols + Hôtels
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:
-
FlightBooking, TrainBooking and HotelBooking
sont différents sous-systèmes de grand système:TravelFacade
-
TravelFacade
offre une interface simple pour réserver l'une des options ci-dessousFlight Booking Train Booking Hotel Booking Flight + Hotel booking Train + Hotel booking
-
livre de l'API de TravelFacade appelle en interne ci-dessous Api de sous-systèmes
flightBooking.bookFlight trainBooking.bookTrain(info); hotelBooking.bookHotel(info);
-
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 )
- Façade est plus comme un helper pour les applications client
- 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.
- 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
- 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.
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#.
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.
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.
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.
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.
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
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.
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
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.