[JAVA] Erläutern Sie die Vorzüge des staatlichen Musters anhand des Bewertungsurteils des Films

Implementieren Sie die Werke, die der Benutzer sehen kann, damit sie nach dem Bewertungssystem des Films sortiert werden können.

Das Filmbewertungssystem ist eine altersbeschränkende Regelung. G: Alle Altersgruppen PG12: 12 Jahre und älter R15 +: 15 Jahre und älter R18 +: 18 Jahre und älter Es gibt Kategorien wie.

Klassen Diagramm

Das Statusmuster befindet sich im roten Rahmen und wird vom Benutzer verwendet. image.png Das RatingSystem wird als Schnittstelle verwendet und jede Einschränkung ist in G / PG12 / R15 implementiert. Das Fehlen von R18 setzt voraus, dass Sie sich nicht mit R18-Filmen befassen.

verdienen

-Die Altersgrenze kann auf die Implementierungsklasse RatingSystem (G / PG / R15) beschränkt werden. (Implementierungslokalisierung) ・ R18-Filme werden verarbeitet, und selbst wenn Spezifikationen hinzugefügt werden, können sie problemlos verarbeitet werden. (Leicht zu ändern)

Quellcode

interface RatingSystem

RatingSystem.java


package state.rating;

public interface RatingSystem {
    public boolean checkLimit(int age);
}

class G

G.java


package state.rating;

public class G implements RatingSystem {

    @Override
    public boolean checkLimit(int age) {
        return true;
    }
}

class PG12

PG12.java


package state.rating;

public class PG12 implements RatingSystem {

    @Override
    public boolean checkLimit(int age) {
        if(12 <= age)
            return true;
        return false;
    }
}

class R15

R15.java


package state.rating;

public class R15 implements RatingSystem {

    @Override
    public boolean checkLimit(int age) {
        if(15 <= age)
            return true;
        return false;
    }
}

class Movie

Movie.java


package state.rating;

public class Movie {
    private String _title;
    private RatingSystem _rating;

    public Movie(String title, RatingSystem rating) {
        _title = title;
        _rating = rating;
    }

    public String title() {
        return _title;
    }

    public boolean checkLimit(int age) {
        return _rating.checkLimit(age);
    }
}

class User

User.java


package state.rating;

public class User {
    private String _name;
    private int _age;

    User(String name, int age){
        _name = name;
        _age = age;
    }

    public String name() {
        return _name;
    }

    public int age() {
        return _age;
    }

    public void play(Movie movie) {
        System.out.println(movie.title() + "Spielen.");
        if(!movie.checkLimit(_age)) {
            System.out.println(" >>>Kann aufgrund eines Altersbeschränkungsfehlers nicht gespielt werden.");
            stop(movie);
        }
    }

    public void stop(Movie movie) {
        System.out.println(movie.title() + "Stoppen.");
    }
}

Main

Main.java


package state.rating;

public class Main {
    public static void main(String... args) {

        Movie torasan = new Movie("Es ist schwer für einen Mann, Torajiro Sunset, kleine Verbrennung", new G());
        Movie titan = new Movie("Fortschrittlicher Riesenangriff auf Titan", new PG12());
        Movie jingi = new Movie("Kampf ohne Gerechtigkeit", new R15());

        User shinnosuke = new User("Shinnosuke Nohara", 5);
        System.out.println(shinnosuke.name());
        shinnosuke.play(torasan);
        shinnosuke.play(titan);
        shinnosuke.play(jingi);
        System.out.println();

        User taro = new User("Taro", 12);
        System.out.println(taro.name());
        taro.play(torasan);
        taro.play(titan);
        taro.play(jingi);
        System.out.println();

        User hanako = new User("Hanako", 17);
        System.out.println(hanako.name());
        hanako.play(torasan);
        hanako.play(titan);
        hanako.play(jingi);
        System.out.println();
    }
}

Ausführungsergebnis

Abhängig vom Alter jedes Benutzers werden Filme, die in der Altersgrenze gefangen sind, zwangsweise gestoppt.

Shinnosuke Nohara Der Mann ist schmerzhaft, Torajiro spielt den Sonnenuntergang klein brennen. Spielen Sie den Marschgiganten ATTACK ON TITAN. \ >>> Kann aufgrund eines Altersbeschränkungsfehlers nicht gespielt werden. Stoppen Sie den Marschgiganten ATTACK ON TITAN. Spiele einen Kampf ohne Gerechtigkeit. \ >>> Kann aufgrund eines Altersbeschränkungsfehlers nicht gespielt werden. Stoppen Sie den Kampf ohne Gerechtigkeit.

Taro Der Mann ist schmerzhaft, Torajiro spielt den Sonnenuntergang klein brennen. Spielen Sie den Marschgiganten ATTACK ON TITAN. Spiele einen Kampf ohne Gerechtigkeit. \ >>> Kann aufgrund eines Altersbeschränkungsfehlers nicht gespielt werden. Stoppen Sie den Kampf ohne Gerechtigkeit.

Hanako Der Mann ist schmerzhaft, Torajiro spielt den Sonnenuntergang klein brennen. Spielen Sie den Marschgiganten ATTACK ON TITAN. Spiele einen Kampf ohne Gerechtigkeit.

Unterstützung für zusätzliche Anforderungen für R18 +

In der Praxis sind Spezifikationsänderungen häufig. Hier nehmen wir eine Situation an, in der "zusätzliche Anforderungen für den Umgang mit R18-Filmen aufgetreten sind".

"Ich habe mich für R18-Filme entschieden. Könnten Sie das beheben?" Wenn es Ihnen gesagt wird, sollten Sie es sofort ändern können, oder?

Wenn es sich um ein Statusmuster handelt, fügen Sie die R18-Klasse hinzu, und Sie sind fertig. Hier und da muss nicht nach dem Prozess zur Beurteilung der Altersgrenze (if-Aussage) gesucht und korrigiert werden.

class R18

R18.java


package state.rating;

public class R18 implements RatingSystem {

    @Override
    public boolean checkLimit(int age) {
        if(18 <= age)
            return true;
        return false;
    }
}

Main

Main.java


package state.rating;

public class Main {
    public static void main(String... args) {

        Movie torasan = new Movie("Es ist schwer für einen Mann, Torajiro Sunset, kleine Verbrennung", new G());
        Movie titan = new Movie("Fortschrittlicher Riesenangriff auf Titan", new PG12());
        Movie jingi = new Movie("Kampf ohne Gerechtigkeit", new R15());
        Movie devil = new Movie("Das giftige Monster des Teufels", new R18());   //* Zusätzliche Bemerkungen

        User shinnosuke = new User("Shinnosuke Nohara", 5);
        System.out.println(shinnosuke.name());
        shinnosuke.play(torasan);
        shinnosuke.play(titan);
        shinnosuke.play(jingi);
        shinnosuke.play(devil); //* Zusätzliche Bemerkungen
        System.out.println();

        User taro = new User("Taro", 12);
        System.out.println(taro.name());
        taro.play(torasan);
        taro.play(titan);
        taro.play(jingi);
        taro.play(devil);   //* Zusätzliche Bemerkungen
        System.out.println();

        User hanako = new User("Hanako", 17);
        System.out.println(hanako.name());
        hanako.play(torasan);
        hanako.play(titan);
        hanako.play(jingi);
        hanako.play(devil); //* Zusätzliche Bemerkungen
        System.out.println();

        //* Zusätzliche Bemerkungen
        User isekai = new User("Universitätsstudent in einer anderen Welt wiedergeboren", 18);
        System.out.println(isekai.name());
        isekai.play(torasan);
        isekai.play(titan);
        isekai.play(jingi);
        isekai.play(devil);
        System.out.println();
    }
}

Ausführungsergebnis

Unter den oben genannten Benutzern ist derjenige, der den R18-Film (Devil's Poisonous Monster) sehen kann Nur "Studenten, die in einer anderen Welt wiedergeboren wurden", die 18 Jahre alt sind.

Shinnosuke Nohara Der Mann ist schmerzhaft, Torajiro spielt den Sonnenuntergang klein brennen. Spielen Sie den Marschgiganten ATTACK ON TITAN. \ >>> Kann aufgrund eines Altersbeschränkungsfehlers nicht gespielt werden. Stoppen Sie den Marschgiganten ATTACK ON TITAN. Spiele einen Kampf ohne Gerechtigkeit. \ >>> Kann aufgrund eines Altersbeschränkungsfehlers nicht gespielt werden. Stoppen Sie den Kampf ohne Gerechtigkeit. Spiele das giftige Monster des Teufels. \ >>> Kann aufgrund eines Altersbeschränkungsfehlers nicht gespielt werden. Stoppen Sie das giftige Monster des Teufels.

Taro Der Mann ist schmerzhaft, Torajiro spielt den Sonnenuntergang klein brennen. Spielen Sie den Marschgiganten ATTACK ON TITAN. Spiele einen Kampf ohne Gerechtigkeit. \ >>> Kann aufgrund eines Altersbeschränkungsfehlers nicht gespielt werden. Stoppen Sie den Kampf ohne Gerechtigkeit. Spiele das giftige Monster des Teufels. \ >>> Kann aufgrund eines Altersbeschränkungsfehlers nicht gespielt werden. Stoppen Sie das giftige Monster des Teufels.

Hanako Der Mann ist schmerzhaft, Torajiro spielt den Sonnenuntergang klein brennen. Spielen Sie den Marschgiganten ATTACK ON TITAN. Spiele einen Kampf ohne Gerechtigkeit. Spiele das giftige Monster des Teufels. \ >>> Kann aufgrund eines Altersbeschränkungsfehlers nicht gespielt werden. Stoppen Sie das giftige Monster des Teufels.

Universitätsstudent in einer anderen Welt wiedergeboren Der Mann ist schmerzhaft, Torajiro spielt den Sonnenuntergang klein brennen. Spielen Sie den Marschgiganten ATTACK ON TITAN. Spiele einen Kampf ohne Gerechtigkeit. Spiele das giftige Monster des Teufels.

Zusammenfassung

・ Beurteilung und Funktionen basierend auf dem Status können auf eine bestimmte Klasse beschränkt werden. (Implementierungslokalisierung) -Es ist relativ einfach, Spezifikationen hinzuzufügen oder zu ändern. (Leicht zu ändern)

Recommended Posts

Erläutern Sie die Vorzüge des staatlichen Musters anhand des Bewertungsurteils des Films
Refactor die Implementierung des Decorator-Musters mit einer funktionalen Schnittstelle
Die Geschichte, einen Reverse-Proxy mit ProxyServlet zu erstellen
Überwachen Sie den internen Status von Java-Programmen mit Kubernetes
Eine Geschichte voller Grundlagen von Spring Boot (gelöst)
Überprüfen Sie die Funktion von zwei Rollen mit einer Chat-Anwendung
Finden Sie mit Kotlin die Anzahl der Tage in einem Monat
Die Geschichte des Refactorings mit einem selbstgemachten Helfer zum ersten Mal in einer Rails-App
Versuchen Sie, die Idee eines zweidimensionalen Arrays mit einem eindimensionalen Array nachzuahmen
Eine Geschichte über das Erreichen der League Of Legends-API mit JAVA
Eine Geschichte, die mit der Einführung von Web Apple Pay zu kämpfen hatte
[Illustration] Finden der Summe von Münzen mit einer rekursiven Funktion [Ruby]
Ein Memorandum über das FizzBuzz-Problem
Erklären Sie die Spalte von Spree :: Product
Monade ist ein Entwurfsmuster, um "das Vorhandensein von Nebenwirkungen in einer Methode mit einem Rückgabetyp auszudrücken".
Android App: Lassen Sie uns den Mechanismus des Bildschirmübergangs mit einfachem Code erklären
Lassen Sie uns das Ergebnis der Analyse von Java-Bytecode in einem Klassendiagramm ausdrücken
(Memo) Holen Sie sich mit Hilfe von Gradle eine Reihe von abhängigen Bibliotheksgläsern
Was für eine Strategiemusterfabrik, kein Staat
Erstellen Sie mit dem Befehl eine JAR-Datei
Überprüfen Sie den Inhalt der Parameter mit pry
Führen Sie DMN mit der Camunda DMN Engine aus
Extrahieren Sie einen Teil einer Zeichenfolge in Ruby
Über die Behandlung von BigDecimal (mit Reflexion)
Ich habe das Zustandsmuster und das Strategiemuster studiert
Formatieren Sie den Inhalt von LocalDate mit DateTimeFormatter
Finden Sie den Unterschied von einem Vielfachen von 10
So erhalten Sie die ID eines Benutzers, der sich in Swift bei Firebase authentifiziert hat
Der Name ist und das Alter ist Senden Sie eine Benachrichtigung an Slack mit der Java-freien Version von Sentry (mit Lambda)
Überprüfen Sie das ID-Token eines von AWS Cognito in Java authentifizierten Benutzers
Ein kurzer Hinweis zur Verwendung von jshell mit dem offiziellen Docker-Image des JDK