[JAVA] À quoi sert le modèle de façade?

Objectif

Expliquez brièvement à quoi sert le modèle de façade (avec du code)

Quelle est l'utilité du modèle de façade?

En termes simples, ** un coordinateur pour plusieurs processus **. Par conséquent, il est utile dans la mesure où il peut effectuer divers travaux avec une seule demande.

Exigences relatives aux motifs de façade

Diagramme de classe

Diagramme de classe de modèle de façade

image.png

Source: Wiki --Modèle de façade

Diagramme de classe du code expliqué cette fois

image.png C'est une spécification du point de vue que Librarian a BookList et LendingList, et il n'y a aucun changement dans l'implémentation elle-même de son utilisation comme fenêtre.

Chaque rôle du diagramme de classe

Façade: classe de bibliothécaire Sous-système: classe BookList, classe LendingList Client: Classe de visiteur

Implication de chaque classe

code

Librarian.java


package facade;

//bibliothécaire
public class Librarian {
    private BookList _bookList;
    private LendingList _lendingList;

    Librarian(BookList bookList, LendingList lendingList){
        _bookList = bookList;
        _lendingList = lendingList;
    }

    public String searchBook(String bookName) {
        //Est-il en possession?
        if(!_bookList.existsBook(bookName)) return "Le livre n'est pas en possession";

        //Est-ce sur l'étagère?
        if (_lendingList.isLending(bookName)) return "Prêt";

        //Lieu de collecte
        return _bookList.searchLocation(bookName);
    }
}

BookList.java


package facade;

import java.util.HashMap;
import java.util.Map;

//Registre des collections
public class BookList {
    private Map<String, String> _record = new HashMap<String, String>();

    public void addRecord(String bookName, String locationName) {
        _record.put(bookName, locationName);
    }

    public boolean existsBook(String bookName) {
        return _record.containsKey(bookName);
    }

    public String searchLocation(String bookName) {
        return (String)_record.get(bookName);
    }
}

LendingList.java


package facade;

import java.util.ArrayList;
import java.util.List;

//Livre de prêt
public class LendingList {
    private List<String> _record = new ArrayList<String>();

    public void lending(String bookName) {
        _record.add(bookName);
    }

    public void returned(String bookName) {
        _record.remove(bookName);
    }

    public boolean isLending(String bookName) {
        return _record.contains(bookName);
    }
}

Visitor.java


package facade;

public class Visitor {
    private String _name;
    private String _targetBookName;

    Visitor(String name){
        _name = name;
    }

    public void setTargetBookName(String targetBookName) {
        _targetBookName = targetBookName;
    }

    public String targetBookName() {
        return _targetBookName;
    }

    public String name() {
        return _name;
    }
}

Main.java


package facade;

import java.io.PrintStream;

public class Main {
    public static void main(String[] args) {
        //Jeu de valeurs initiales
        // (Liste des collections)
        BookList bookList = new BookList();
        bookList.addRecord("Livre illustré d'insectes", "Étagère numéro 1");
        bookList.addRecord("Livre d'images animalières", "Étagère numéro 1");
        bookList.addRecord("Momotaro", "Étagère numéro 2");
        bookList.addRecord("Kintaro", "Étagère numéro 2");
        bookList.addRecord("Comment fonctionne l'ordinateur", "Étagère numéro 3");
        bookList.addRecord("Programmation Java", "Étagère numéro 3");
        // (Liste de prêt)
        LendingList lendingList = new LendingList();
        lendingList.lending("Livre illustré d'insectes");
        lendingList.lending("Momotaro");
        lendingList.lending("Comment fonctionne l'ordinateur");

        PrintStream out = System.out;

        //utilisateur[Yamada-kun]:bibliothécaire[Nakamura-kun]Lors de la demande
        Visitor yamada = new Visitor("Yamada");
        yamada.setTargetBookName("Livre illustré d'insectes");
        // (Fenêtre[Nakamura-kun])
        Librarian nakamura = new Librarian(bookList, lendingList);
        // (Poser une question à Nakamura-kun sur l'emplacement du livre d'images d'insectes)
        out.println(yamada.name() + "Résultat:");
        out.println(nakamura.searchBook(yamada.targetBookName()));
        out.println();

        //utilisateur[Kinoshita-kun]: Lors de la recherche par vous-même
        Visitor kinoshita = new Visitor("Kinoshita");
        kinoshita.setTargetBookName("Livre d'images animalières");
        if(!bookList.existsBook(kinoshita.targetBookName())) {
            out.println("Faisons un autre livre");
            return;
        }
        if(lendingList.isLending(kinoshita.targetBookName())) {
            out.println("Faisons un autre livre");
            return;
        }
        out.println(kinoshita.name() + "Résultat:");
        out.println(bookList.searchLocation(kinoshita.targetBookName()));
        out.println();
    }
}

Veuillez changer le targetBookName de Yamada-kun et Kinoshita-kun et vérifier l'opération.

Github https://github.com/TakumiKondo/designpattern/tree/master/src/facade/librarian

Où utiliser

Une fois que vous commencez à écrire une série de code qui appelle plusieurs processus à divers endroits, Pensez à utiliser le modèle de façade.

Cependant, comme l'exigence l'indique, elle ne doit pas contenir de logique complexe. Jusqu'au dernier, il faut se consacrer au rôle de traitement de bundling.

référence

Motif de façade https://ja.wikipedia.org/wiki/Facade_%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3

Source du code (modifié en fonction de cela) https://www.techscore.com/tech/DesignPattern/Facade.html/

Recommended Posts

À quoi sert le modèle de façade?
A quoi sert le constructeur?
Qu'est-ce que la façade? ??
Quel est le modificateur volatile pour les variables Java?
Quelle est la méthode pluck?
Qu'est-ce que la classe BufferedReader?
[Ruby] À quoi sert «!!»?
Quelle est la méthode d'initialisation?
'% 02d' Quel est le% de% 2?
Modèle de façade
Motif de façade
Quel est le meilleur type de données de migration? ??
Qu'est-ce qu'un test? ・ À propos de l'importance d'un test
[Pour les débutants en programmation] Qu'est-ce qu'une méthode?
Quelle est la meilleure lecture de fichier (Java)
Quel est le test de code de test de modèle
Quelle est la méthode principale en Java?
Quelle est la structure des données d'ActionText?
Qu'est-ce que JSP? ~ Connaissons les bases de JSP !! ~
Qu'est-ce que Cubby
Qu'est-ce qui est nul? ]
Qu'est-ce que 'java
Qu'est-ce que Keycloak
Qu'est-ce que le modèle Java Servlet / JSP MVC?
Qu'est-ce que maven?
Qu'est-ce que Jackson?
Ce qui est différent du langage PHP. [Remarque]
Qu'est-ce que soi
Qu'est-ce que Jenkins
Qu'est-ce que ArgumentMatcher?
Qu'est-ce que IM-Juggling?
Qu'est-ce que les paramètres
Qu'est-ce que SLF4J?
Qu'est-ce que Java <>?
Qu'est-ce que POJO
Modèle de conception ~ Façade ~
Quelle est la différence entre SimpleDateFormat et DateTimeFormatter? ??
Qu'est-ce que 'java
Qu'est-ce que centOS
Qu'est-ce que RubyGem?
Qu'est-ce que before_action?
Qu'est-ce que Docker
La clé publique pour jenkins-2.249.1-1.1.noarch.rpm n'est pas installée
Qu'est-ce que Byte?
Qu'est-ce que Tomcat
Quelle est la différence entre System Spec et Feature Spec?
[Rails] Quelle est la différence entre la redirection et le rendu?
Que dois-je utiliser pour le framework de test [Rails]
[JAVA] Quelle est la différence entre interface et abstract? ?? ??
Quelle est la différence entre ignorer et en attente? [RSpec]
Ce dont les ingénieurs Java ont besoin pour se préparer à la version Java 11
Qu'est-ce que l'assemblage Maven?
Qu'est-ce que `docker-compose up`?
Qu'est-ce qu'un constructeur
Qu'est-ce que vue cli
Qu'est-ce qu'une interface
Qu'est-ce que le moi de Ruby?