[JAVA] Welchen Mann magst du? Identifizieren von Liebeszielen anhand des Chain of Responsibility-Musters

【Überblick】

Programmierung mit dem Muster "Chain of Responsibility" von Entwurfsmustern. Wenn der Mann, der das Argument abgegeben hat, es mag, wird es verarbeitet, wenn nicht, wird es der nächsten Frau vorgestellt. Es ist okay, wenn es keiner Frau gefällt! Jeder mag Enako, also gibt es eine helfende Hand. Es besteht jedoch eine hohe Wahrscheinlichkeit des Betrugs. Ich benutze Java 8.

[Hierarchie]

DesignPattern → Projektname    |---src | --- ChainOfResponsibility → Paketname | --- Man.java (Klasse, die männliche Größe und Gewicht hält) | --- Woman.java (Klasse zum Bilden einer Frauenkette) | --- EveryoneLike.java (Eine Klasse, die jeder mag) | --- WeightCare.java (Klasse, die sich nur um das Gewicht kümmert) | --- HeightCare.java (Klasse, die sich nur um die Höhe kümmert) | --- NoOneLike.java (Klasse, die niemand mag) | --- Main.java (Klasse, die die Hauptverarbeitung für die Programmausführung ausführt)

[Klassen Diagramm]

chainOfResponsibility.png

【Code】

Man.java


package ChainOfResponsibility;

public class Man {
	//Name
	private String name;
	//Höhe
	private int height;
	//Körpergewicht
	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 + "Höhe:" + height + "cm Gewicht:" + 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) {
		//Niemand mag Mio
		Woman mio = new NoOneLike("Mio");
		//Ich mag Ahorn, wenn Sie ein Mann mit einem Gewicht von 50 kg oder weniger sind
		Woman kaede = new WeightCare("Ahorn", 50);
		//Nagisa mag Männer über 170 cm groß
		Woman nagisa = new HeightCare("Nagisa", 170);
		//Jeder mag 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 ist 150 cm groß und wiegt 47 kg
		ManList.add(new Man("Hiroto", 150, 47));
		//Naohiro ist 173 cm groß und wiegt 57 kg
		ManList.add(new Man("Naohiro", 173, 57));
		//Daisuke ist 160 cm groß und wiegt 64 kg
		ManList.add(new Man("Daisuke", 160, 64));
	}
}

【Ausführungsergebnis】

[Ahorn] likes [Hiroto Höhe: 150cm Gewicht: 47kg].
[Nagisa] likes [Naohiro Größe: 173cm Gewicht: 57kg].
[Enako] likes [Daisuke Höhe: 160cm Gewicht: 64kg].

【Referenz】

[Einführung in Entwurfsmuster, die in der erweiterten und überarbeiteten Java-Sprache gelernt wurden](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 & keywords =% E3% 83% 87% E3% 82% B6% E3% 82 % A4% E3% 83% B3% E3% 83% 91% E3% 82% BF% E3% 83% BC% E3% 83% B3)

[Bonus Ecke]

・ Artikel, die mit Designmustern interessant waren Dramatisch vor ◯ After-Sales-Designmuster ~ Fassadenmuster ~

Recommended Posts

Welchen Mann magst du? Identifizieren von Liebeszielen anhand des Chain of Responsibility-Musters
Muster der Verantwortungskette
Muster der Verantwortungskette
Entwurfsmuster ~ Verantwortungskette ~
Verwenden Sie die Standardmethode der Schnittstelle ordnungsgemäß?