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.
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 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 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));
}
}
}
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 + "]";
}
}
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