Frage

In den Eingabemustern:

Warum sollen nicht die Client-Teilnehmer die gleiche Klasse wie die Aufrufer-Teilnehmer sein? Gibt es mögliche Szenarien, wenn die Client Teilnehmer und die Aufrufer-Teilnehmer können die gleiche Klasse sein?

War es hilfreich?

Lösung

wichtigste Grund dafür ist, dass es das einzig responsiblity Prinzip verstößt. Der Kunde Teilnehmer und Invoker particpant haben sowohl einzelne responsibilties und eine Änderung an eine wird das andere beeinflussen.

Andere Tipps

1) Hauptverantwortung für Client ist, um eine ordnungsgemäße Instanciation von Invoker, Empfänger und Befehlsobjekte und dann Ausführungsprozedur in geeigneten Ort und Zeit initiieren.

Es könnte zum Beispiel so etwas wie diese

class Client {

...

invoker.executeCommand()

...

}

2) Hauptverantwortung für Fragesteller einer oder mehr Befehle Methoden des Befehlsobjekts in bestimmten Reihenfolge aufgerufen werden kann.

Beispiel:

class Invoker {

...
command.command1();
command.command2();
command.command3();
...

}

Wir betrachten zum Beispiel java.awt.event.KeyListener Klasse. Es verfügt über drei Methoden, die in der folgenden Reihenfolge aufgerufen:

keyPressed(KeyEvent e)
keyTyped(KeyEvent e)
keyReleased(KeyEvent e)

Invoker Klasse für diesen Zuhörer könnte sein:

class KeyInvocation {
    KeyListener listener;

    void invokeKey(EventObject e) {
        listener.keyPressed(e);
        listener.keyTyped(e);
        listener.keyReleased(e);
    }
}

Meantime Client-Klasse soll die richtige Instanciate Eventobject, KeyListener und KeyInvocation und dann in der richtigen Ort und Zeit invokeKey Methode ausführen.

Natürlich Invoker ist eine zusätzliche Schicht von Befehlsmustern. Im einfacheren Fall von Befehlsmustern können wir Invoker Klasse überhaupt und die ganze Arbeit in Kunden ein.

überspringen
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top