[JAVA] Quel homme aimez-vous? Identifier les cibles d'amour en utilisant le modèle de la chaîne de responsabilité

【Aperçu】

Programmation utilisant le modèle «Chaîne de responsabilité» des modèles de conception. Si l'homme passé dans l'argument l'aime, il sera traité, sinon, il sera présenté à la femme suivante. Ce n'est pas grave si aucune femme ne l'aime! Tout le monde aime Enako, il y a donc un coup de main. Cependant, il existe une forte possibilité de tricherie. J'utilise Java 8.

[Hiérarchie]

DesignPattern → Nom du projet    |---src | --- ChainOfResponsibility → Nom du package | --- Man.java (Classe qui contient la taille et le poids des hommes) | --- Woman.java (Classe pour faire une chaîne de femmes) | --- EveryoneLike.java (Une classe que tout le monde aime) | --- WeightCare.java (Classe qui ne se soucie que du poids) | --- HeightCare.java (Classe qui ne se soucie que de la hauteur) | --- NoOneLike.java (Classe que personne n'aime) | --- Main.java (Classe qui effectue le traitement principal pour l'exécution du programme)

[Diagramme de classe]

chainOfResponsibility.png

【code】

Man.java


package ChainOfResponsibility;

public class Man {
	//Nom
	private String name;
	//la taille
	private int height;
	//poids
	private int weight;

	public Man(String name, int height, int weight) {
		this.name = name;
		this.height = height;
		this.weight = weight;
	}

	public String getName() {
		return name;
	}

	public int getHeight() {
		return height;
	}

	public int getWeight() {
		return weight;
	}

	public String toString() {
		return "[" + name + "la taille:" + height + "Poids en cm:" + weight + "kg]";
	}
}

Woman.java


package ChainOfResponsibility;

public abstract class Woman {
	private String name;
	private Woman next;

	public Woman(String name) {
		this.name = name;
	}

	public Woman setNext(Woman next) {
		this.next = next;
		return next;
	}

	public void attackedByMan(Man man) {
		if(tryLove(man)) {
			like(man);
		} else if (next != null) {
			next.attackedByMan(man);
		} else {
			dislike(man);
		}
	}

	public String toString() {
		return "[" + name + "]";
	}

	protected abstract boolean tryLove(Man man);

	protected void like(Man man) {
		System.out.println(this + " likes " + man + ".");
	}

	protected void dislike(Man man) {
		System.out.println(this + " doesn't likes " + man + ".");
	}
}

EveryoneLike.java


package ChainOfResponsibility;

public class EveryoneLike extends Woman {
	public EveryoneLike(String name) {
		super(name);
	}

	@Override
	protected boolean tryLove(Man man) {
		return true;
	}
}

HeightCare.java


package ChainOfResponsibility;

public class HeightCare extends Woman {
	private int height;

	public HeightCare(String name, int height) {
		super(name);
		this.height = height;
	}

	protected boolean tryLove(Man man)	 {
		return height <= man.getHeight();
	}
}

WeightCare.java


package ChainOfResponsibility;

public class WeightCare extends Woman {
	private int weight;

	public WeightCare(String name, int weight) {
		super(name);
		this.weight = weight;
	}

	@Override
	protected boolean tryLove(Man man) {
		return man.getWeight() <= weight;
	}
}

NoOneLike.java


package ChainOfResponsibility;

public class NoOneLike extends Woman {
	public NoOneLike(String name) {
		super(name);
	}

	@Override
	protected boolean tryLove(Man man) {
		return false;
	}
}

Main.java


package ChainOfResponsibility;

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

public class Main {
	private static List<Man> ManList = new ArrayList<>();

	public static void main(String[] args) {
		//Personne n'aime Mio
		Woman mio = new NoOneLike("Mio");
		//J'aime l'érable si vous êtes un homme de 50 kg ou moins
		Woman kaede = new WeightCare("Érable", 50);
		//Nagisa aime les hommes mesurant plus de 170 cm
		Woman nagisa = new HeightCare("Nagisa", 170);
		//Tout le monde aime Enako
		Woman enako = new EveryoneLike("Enako");

		mio.setNext(kaede).setNext(nagisa).setNext(enako);
		setMan();

		for (Man man : ManList) {
			mio.attackedByMan(man);
		}
	}

	private static void setMan() {
		//Hiroto mesure 150 cm et pèse 47 kg
		ManList.add(new Man("Hiroto", 150, 47));
		//Naohiro mesure 173 cm et pèse 57 kg
		ManList.add(new Man("Naohiro", 173, 57));
		//Daisuke mesure 160 cm et pèse 64 kg
		ManList.add(new Man("Daisuke", 160, 64));
	}
}

【Résultat de l'exécution】

[Érable] likes [Hiroto Hauteur: 150 cm Poids: 47 kg].
[Nagisa] likes [Naohiro Hauteur: 173 cm Poids: 57 kg].
[Enako] likes [Daisuke Hauteur: 160 cm Poids: 64 kg].

【référence】

[Introduction aux modèles de conception appris dans le langage Java amélioré et révisé](https://www.amazon.co.jp/%E5%A2%97%E8%A3%9C%E6%94%B9%E8%A8%82% E7% 89% 88Java% E8% A8% 80% E8% AA% 9E% E3% 81% A7% E5% AD% A6% E3% 81% B6% E3% 83% 87% E3% 82% B6% E3% 82% A4% E3% 83% B3% E3% 83% 91% E3% 82% BF% E3% 83% BC% E3% 83% B3% E5% 85% A5% E9% 96% 80-% E7% B5 % 90% E5% 9F% 8E-% E6% B5% A9 / dp / 4797327030 / ref = sr_1_1? Ie = UTF8 & qid = 1515328473 & sr = 8-1 & mots-clés =% E3% 83% 87% E3% 82% B6% E3% 82 % A4% E3% 83% B3% E3% 83% 91% E3% 82% BF% E3% 83% BC% E3% 83% B3)

[Coin bonus]

・ Articles intéressants avec des motifs de conception Dramatique avant ◯ Modèle de conception après-vente ~ modèle de façade ~

Recommended Posts

Quel homme aimez-vous? Identifier les cibles d'amour en utilisant le modèle de la chaîne de responsabilité
Modèle de chaîne de responsabilité
Modèle de chaîne de responsabilité
Modèle de conception ~ Chaîne de responsabilité ~
Utilisez-vous correctement la méthode par défaut de l'interface?