Ich habe zwei Klassen - zu verarbeiten Klasse A und B.Welche Design-Muster für mein Szenario geeignet ist
Klasse A erhält eine Nachricht von der oberen Schicht, und ich möchte diese Nachricht an Klasse B zu übermitteln. Wenn B diese Nachricht verarbeitet, aktualisiert es seinen eigenen Status und generiert einige Ereignisse. Es gibt eine Methode in Klasse A, die diese Ereignisse an die obere Ebene senden kann.
Ich kann sendEventToUpperLayer() in Klasse A nicht ändern. Also wie kann ich die generierten Ereignisse in Klasse B und seinen Status wieder in Klasse A zurückgeben? Soll ich Klasse B einfach verwerfen und die Logik von Klasse B in Klasse A verschieben?
public class A {
private B b;
private void processMessage(Message) {
b.processMessage(Message);
}
private void sendEventToUpperLayer() {
}
}
public class B {
public void processMessage(Message) {
// It will generate a few events and update b's state.
// All these events and b's state will need to use class A's method of sendEventToUpperLayer() to forward to upper layer.
}
}
Ehrlich gesagt ist nicht klar, was Sie versuchen zu tun. Ich könnte einen Vorschlag riskieren, werfen Sie einen Blick auf [Beobachtermuster] (https://en.wikipedia.org/wiki/Observer_pattern) – freedev
Danke fredev. Eigentlich ist Observer Pattern das erste Muster, das mir in den Sinn kommt. Das Beobachtermuster beinhaltet jedoch nur beobachtbare Beobachter. In meinem Fall betrachte ich meine Klasse A als beobachtbar und Klasse B als Beobachter, da die Klasse A die Klasse B mit b.processMessage (Message) benachrichtigt. Aber meine Frage ist, wie kann Klasse B die Methode der Klasse A verwenden, die inverse Benachrichtigung ist? –
Sie könnten auch mit Delegierung versuchen, indem Sie an das enthaltene 'B' ein Lambda, eine Methode oder ein Objekt übergeben, das nützlich ist, um den Container' A' zurückzurufen. – freedev