[JAVA] Wofür ist das Fassadenmuster nützlich?

Zweck

Erklären Sie kurz, wofür das Fassadenmuster nützlich ist (mit Code).

Wie nützlich ist das Fassadenmuster?

Einfach ausgedrückt, ** ein Koordinator für mehrere Prozesse **. Daher ist es nützlich, dass mit einer Anforderung verschiedene Aufgaben ausgeführt werden können.

Anforderungen an Fassadenmuster

Klassen Diagramm

Klassendiagramm des Fassadenmusters

image.png

Quelle: Wiki - Fassadenmuster

Klassendiagramm des Codes erklärt diesmal

image.png Unter dem Gesichtspunkt, dass Librarian über BookList und LendingList verfügt, handelt es sich um eine Spezifikation, und es gibt keine Änderung in der Implementierung selbst, diese als Fenster zu verwenden.

Jede Rolle des Klassendiagramms

Fassade: Bibliothekar Klasse Subsystem: BookList-Klasse, LendingList-Klasse Kunde: Besucherklasse

Beteiligung jeder Klasse

Code

Librarian.java


package facade;

//Bibliothekar
public class Librarian {
    private BookList _bookList;
    private LendingList _lendingList;

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

    public String searchBook(String bookName) {
        //Ist es im Besitz?
        if(!_bookList.existsBook(bookName)) return "Das Buch ist nicht im Besitz";

        //Ist es im Bücherregal?
        if (_lendingList.isLending(bookName)) return "Ausleihe";

        //Sammelort
        return _bookList.searchLocation(bookName);
    }
}

BookList.java


package facade;

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

//Sammlungsbuch
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;

//Leihbuch
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) {
        //Anfangswert eingestellt
        // (Sammlungsliste)
        BookList bookList = new BookList();
        bookList.addRecord("Bilderbuch für Insekten", "Regal Nummer 1");
        bookList.addRecord("Tierbilderbuch", "Regal Nummer 1");
        bookList.addRecord("Momotaro", "Regal Nummer 2");
        bookList.addRecord("Kintaro", "Regal Nummer 2");
        bookList.addRecord("Wie der Computer funktioniert", "Regal Nummer 3");
        bookList.addRecord("Java-Programmierung", "Regal Nummer 3");
        // (Leihliste)
        LendingList lendingList = new LendingList();
        lendingList.lending("Bilderbuch für Insekten");
        lendingList.lending("Momotaro");
        lendingList.lending("Wie der Computer funktioniert");

        PrintStream out = System.out;

        //Nutzer[Yamada-Kun]:Bibliothekar[Nakamura-Kun]Auf Anfrage
        Visitor yamada = new Visitor("Yamada");
        yamada.setTargetBookName("Bilderbuch für Insekten");
        // (Fenster[Nakamura-Kun])
        Librarian nakamura = new Librarian(bookList, lendingList);
        // (Fragen Sie Nakamura-kun nach dem Standort des Insekten-Bilderbuchs)
        out.println(yamada.name() + "Ergebnis:");
        out.println(nakamura.searchBook(yamada.targetBookName()));
        out.println();

        //Nutzer[Kinoshita-Kun]: Wenn Sie selbst suchen
        Visitor kinoshita = new Visitor("Kinoshita");
        kinoshita.setTargetBookName("Tierbilderbuch");
        if(!bookList.existsBook(kinoshita.targetBookName())) {
            out.println("Lass uns ein anderes Buch machen");
            return;
        }
        if(lendingList.isLending(kinoshita.targetBookName())) {
            out.println("Lass uns ein anderes Buch machen");
            return;
        }
        out.println(kinoshita.name() + "Ergebnis:");
        out.println(bookList.searchLocation(kinoshita.targetBookName()));
        out.println();
    }
}

Bitte ändern Sie den Zielbuchnamen von Yamada-kun und Kinoshita-kun und überprüfen Sie den Vorgang.

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

Wo zu verwenden

Sobald Sie eine Reihe von Codes schreiben, die mehrere Prozesse an verschiedenen Stellen aufrufen, Erwägen Sie die Verwendung des Fassadenmusters.

Wie die Anforderung besagt, sollte sie jedoch keine komplexe Logik enthalten. Bis zuletzt ist es erforderlich, sich der Rolle der Bündelungsverarbeitung zu widmen.

Referenz

Fassadenmuster https://ja.wikipedia.org/wiki/Facade_%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3

Codequelle (basierend darauf geändert) https://www.techscore.com/tech/DesignPattern/Facade.html/

Recommended Posts

Wofür ist das Fassadenmuster nützlich?
Wofür ist der Konstruktor?
Was ist Fassade? ??
Was ist der flüchtige Modifikator für Java-Variablen?
Was ist die Zupfmethode?
Was ist die BufferedReader-Klasse?
[Ruby] Wofür wird `!!` verwendet?
Was ist die Initialisierungsmethode?
'% 02d' Was ist der% von% 2?
Fassadenmuster
Fassadenmuster
Was ist der beste Migrationsdatentyp? ??
Was ist ein Test? ・ Über die Wichtigkeit eines Tests
[Für Programmieranfänger] Was ist eine Methode?
Was ist das beste Lesen von Dateien (Java)
Was ist die Hauptmethode in Java?
Wie ist die Datenstruktur von ActionText?
Was ist JSP? ~ Lassen Sie uns die Grundlagen von JSP kennen !! ~
Was ist Cubby?
Was ist null? ]]
Was ist java
Was ist Schlüsselumhang?
Was ist das Java Servlet / JSP MVC-Modell?
Was ist Maven?
Was ist Jackson?
Was unterscheidet sich von der PHP-Sprache. [Hinweis]
Was ist Selbst
Was ist Jenkins?
Was ist ArgumentMatcher?
Was ist IM-Jonglieren?
Was ist params
Was ist SLF4J?
Was ist Java <>?
Was ist POJO?
Entwurfsmuster ~ Fassade ~
Was ist der Unterschied zwischen SimpleDateFormat und DateTimeFormatter? ??
Was ist java
Was ist centOS?
Was ist RubyGem?
Was ist before_action?
Was ist Docker?
Der öffentliche Schlüssel für jenkins-2.249.1-1.1.noarch.rpm ist nicht installiert
Was ist Byte?
Was ist Tomcat?
Was ist der Unterschied zwischen Systemspezifikation und Funktionsspezifikation?
[Rails] Was ist der Unterschied zwischen Redirect und Rendering?
Was soll ich für das Test-Framework verwenden [Rails]
[JAVA] Was ist der Unterschied zwischen Schnittstelle und Zusammenfassung? ?? ??
Was ist der Unterschied zwischen Überspringen und Ausstehend? [RSpec]
Was Java-Ingenieure benötigen, um sich auf die Java 11-Version vorzubereiten
Was ist Maven Assembly?
Was ist Docker-Compose?
Was ist ein Konstruktor?
Was ist vue cli
Was ist eine Schnittstelle?
Was ist Rubys Selbst?