Implémentez les œuvres que l'utilisateur peut voir afin qu'elles puissent être triées en fonction du système de notation du film.
Le système de classification des films est une réglementation limitant l'âge. G: tous âges PG12: 12 ans et plus R15 +: 15 ans et plus R18 +: 18 ans et plus Il existe des catégories telles que.
Le modèle d'état est dans le cadre rouge, et il est utilisé par l'utilisateur. Le RatingSystem est utilisé comme interface et chaque restriction est implémentée dans G / PG12 / R15. L'absence de R18 suppose que vous n'avez pas affaire à des films R18.
-La limite d'âge peut être limitée à la classe d'implémentation RatingSystem (G / PG / R15). (Localisation de l'implémentation) ・ Les films R18 seront traités, et même si des spécifications sont ajoutées, ils peuvent être facilement traités. (Facile à changer)
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() + "Jouer.");
if(!movie.checkLimit(_age)) {
System.out.println(" >>>Impossible de jouer en raison d'une erreur de limite d'âge.");
stop(movie);
}
}
public void stop(Movie movie) {
System.out.println(movie.title() + "Arrêter.");
}
}
Main.java
package state.rating;
public class Main {
public static void main(String... args) {
Movie torasan = new Movie("C'est dur pour un homme, Torajiro Sunset, petite brûlure", new G());
Movie titan = new Movie("Avancer une attaque géante sur TITAN", new PG12());
Movie jingi = new Movie("Bataille sans justice", 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();
}
}
En fonction de l'âge de chaque utilisateur, les films capturés dans la limite d'âge seront arrêtés de force.
Shinnosuke Nohara L'homme est douloureux, Torajiro joue la petite brûlure du coucher du soleil. Jouez au géant de mars ATTACK ON TITAN. \ >>> Impossible de jouer en raison d'une erreur de limite d'âge. Arrêtez le géant de mars ATTAQUE SUR TITAN. Jouez une bataille sans justice. \ >>> Impossible de jouer en raison d'une erreur de limite d'âge. Arrêtez la bataille sans justice.
Taro L'homme est douloureux, Torajiro joue la petite brûlure du coucher du soleil. Jouez au géant de mars ATTACK ON TITAN. Jouez une bataille sans justice. \ >>> Impossible de jouer en raison d'une erreur de limite d'âge. Arrêtez la bataille sans justice.
Hanako L'homme est douloureux, Torajiro joue la petite brûlure du coucher du soleil. Jouez au géant de mars ATTACK ON TITAN. Jouez une bataille sans justice.
En pratique, les changements de spécifications sont courants. Ici, nous supposons une situation où «des exigences supplémentaires pour la gestion des films R18 se sont produites».
"J'ai décidé de gérer les films R18, alors pouvez-vous le réparer?" Si on vous le dit, vous devriez pouvoir le changer immédiatement, non?
S'il s'agit d'un modèle State, ajoutez la classe R18 et vous avez terminé. Il n'est pas nécessaire de rechercher et de corriger le processus de jugement de limite d'âge (si déclaration) ici et là.
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.java
package state.rating;
public class Main {
public static void main(String... args) {
Movie torasan = new Movie("C'est dur pour un homme, Torajiro Sunset, petite brûlure", new G());
Movie titan = new Movie("Avancer une attaque géante sur TITAN", new PG12());
Movie jingi = new Movie("Bataille sans justice", new R15());
Movie devil = new Movie("Monstre venimeux du diable", new R18()); //* Notes complémentaires
User shinnosuke = new User("Shinnosuke Nohara", 5);
System.out.println(shinnosuke.name());
shinnosuke.play(torasan);
shinnosuke.play(titan);
shinnosuke.play(jingi);
shinnosuke.play(devil); //* Notes complémentaires
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); //* Notes complémentaires
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); //* Notes complémentaires
System.out.println();
//* Notes complémentaires
User isekai = new User("Un étudiant universitaire réincarné dans un autre monde", 18);
System.out.println(isekai.name());
isekai.play(torasan);
isekai.play(titan);
isekai.play(jingi);
isekai.play(devil);
System.out.println();
}
}
Parmi les utilisateurs ci-dessus, celui qui peut regarder le film R18 (Devil's Poisonous Monster) est Seuls les «étudiants universitaires qui se sont réincarnés dans un autre monde» qui ont 18 ans.
Shinnosuke Nohara L'homme est douloureux, Torajiro joue la petite brûlure du coucher du soleil. Jouez au géant de mars ATTACK ON TITAN. \ >>> Impossible de jouer en raison d'une erreur de limite d'âge. Arrêtez le géant de mars ATTAQUE SUR TITAN. Jouez une bataille sans justice. \ >>> Impossible de jouer en raison d'une erreur de limite d'âge. Arrêtez la bataille sans justice. Jouez au monstre venimeux du diable. \ >>> Impossible de jouer en raison d'une erreur de limite d'âge. Arrêtez le monstre venimeux du diable.
Taro L'homme est douloureux, Torajiro joue la petite brûlure du coucher du soleil. Jouez au géant de mars ATTACK ON TITAN. Jouez une bataille sans justice. \ >>> Impossible de jouer en raison d'une erreur de limite d'âge. Arrêtez la bataille sans justice. Jouez au monstre venimeux du diable. \ >>> Impossible de jouer en raison d'une erreur de limite d'âge. Arrêtez le monstre venimeux du diable.
Hanako L'homme est douloureux, Torajiro joue la petite brûlure du coucher du soleil. Jouez au géant de mars ATTACK ON TITAN. Jouez une bataille sans justice. Jouez au monstre venimeux du diable. \ >>> Impossible de jouer en raison d'une erreur de limite d'âge. Arrêtez le monstre venimeux du diable.
Un étudiant universitaire réincarné dans un autre monde L'homme est douloureux, Torajiro joue la petite brûlure du coucher du soleil. Jouez au géant de mars ATTACK ON TITAN. Jouez une bataille sans justice. Jouez au monstre venimeux du diable.
・ Le jugement et les fonctions basés sur le statut peuvent être limités à une classe spécifique. (Localisation de l'implémentation) -Il est relativement facile d'ajouter ou de modifier des spécifications. (Facile à changer)
Recommended Posts