[JAVA] Muster der Verantwortungskette

Was ist das Muster der Verantwortungskette?

Verbinde mehrere Objekte wie eine Kette. So bestimmen Sie das gewünschte Objekt, indem Sie nacheinander durch die Objektkette gehen. Wenn die Anforderung verarbeitet werden kann, wird sie verarbeitet, und wenn sie nicht verarbeitet werden kann, wird sie verarbeitet. Als nächstes drehen Sie sich um. Das Muster ist, dass das nächste weiter funktioniert.

Die Rolle des Handlers

Eine Rolle, die die Schnittstelle für die Verarbeitung von Anforderungen definiert. Behalten Sie die nächste Person, und wenn Sie eine Anfrage erhalten, die Sie nicht bearbeiten können, senden Sie sie an diese Person. Die nächste Person spielt auch die Rolle des Handlers.

package chainOfResponsibility;

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

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

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

	public final void support(Trouble trouble) {
		if (resolve(trouble)) {
			done(trouble);
		} else if (next != null) {
			next.support(trouble);
		} else {
			fail(trouble);
		}
	}

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

	protected abstract boolean resolve(Trouble trouble);

	protected void done(Trouble trouble) {
		System.out.println(trouble + "is resolved by " + this + ".");
	}

	protected void fail(Trouble trouble) {
		System.out.println(trouble + " cannot be resolved.");
	}
}

Die Rolle von ConcreteHandler

Die spezifische Rolle der Verarbeitung der Anforderung.

package chainOfResponsibility;

public class NoSupport extends Support{

	public NoSupport(String name) {
		super(name);
	}

	@Override
	protected boolean resolve(Trouble trouble) {
		return false;
	}
}
package chainOfResponsibility;

public class LimitSupport extends Support{
	private int limit;

	public LimitSupport(String name, int limit) {
		super(name);
		this.limit = limit;
	}

	@Override
	protected boolean resolve(Trouble trouble) {
		return trouble.getNumber() < limit;
	}
}
package chainOfResponsibility;

public class SpecialSupport extends Support{
	private int number;

	public SpecialSupport(String name, int number) {
		super(name);
		this.number = number;
	}

	@Override
	protected boolean resolve(Trouble trouble) {
		return trouble.getNumber() == number;
	}

}
package chainOfResponsibility;

public class OddSupport extends Support{

	public OddSupport(String name) {
		super(name);
	}

	@Override
	protected boolean resolve(Trouble trouble) {
		return trouble.getNumber() % 2 == 0;
	}
}

Die Rolle des Kunden

Die Rolle der Anforderung an die erste ConcreteHandler-Rolle.

package chainOfResponsibility;

public class Main {
	public static void main(String[] args) {
		Support alice = new NoSupport("Alice");
		Support bob = new LimitSupport("Bob", 100);
		Support charlie = new SpecialSupport("Charlie", 429);
		Support diana = new LimitSupport("Diana", 200);
		Support elmo = new OddSupport("Elmo");
		Support fred = new LimitSupport("Fred", 300);
		//Kettenbildung
		alice.setNext(bob).setNext(charlie).setNext(diana).setNext(elmo).setNext(fred);
		//Es treten verschiedene Probleme auf
		for (int i = 0; i < 500; i += 33) {
			alice.support(new Trouble(i));
		}
	}
}

Klasse, die Ärger darstellt

package chainOfResponsibility;

public class Trouble {
	private int number;

	 public Trouble(int number) {
		 this.number = number;
	}

	 public int getNumber() {
		 return number;
	 }

	 @Override
	 public String toString() {
		 return "[Trouble " + number + "]";
	 }
}

Ausführungsergebnis

スクリーンショット 2020-09-17 18.22.06.png

https://github.com/aki0207/chainOfResponsibility

Ich habe dies als Referenz verwendet. weniger 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? Dh = UTF8 & qid = 1454743284 & sr = 8-1 & keywords = java% 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 "> Augmented Revised Edition Einführung in in Java gelernte Entwurfsmuster

Recommended Posts

Muster der Verantwortungskette
Muster der Verantwortungskette
Entwurfsmuster ~ Verantwortungskette ~
Überdenken des Java8-Lambda-Ausdrucks- und Stream-Entwurfsmusters - Muster der Verantwortungskette -
Welchen Mann magst du? Identifizieren von Liebeszielen anhand des Chain of Responsibility-Musters
Anwendungsbeispiel für Entwurfsmuster (Nr. 1)