Best Practices für ActionListener [geschlossen]


Entschuldigung für den Titel, wahrscheinlich zu allgemein.

Habe ich schon gelesenSo schreiben Sie einen Action Listener Tutorial von Java und ich bereits gelesendiese Frage, aber ich habe immer noch einige Zweifel: Ich habe mich gefragt, welche Lösung die beste ist, wenn ich dieselbe Aktion mehrmals ausführen muss.

Ich möchte dasselbe wiederverwendenActionListenerIch bin mir jedoch nicht sicher, wie dies am besten erreicht werden kann (in Bezug auf: Codelesbarkeit, Codewartbarkeit, Leistung und Codestil).

Zuerst den "Standard" -Code (den ich verwenden würde, wenn ich den Aktionslistener nicht wiederverwenden würde):

btnMenu.addActionListener(
    new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            Navigator.showMenu();
        }
    }
);

Auf diese Weise kann ich nichts wiederverwenden, da es sich um eine anonyme innere Klasse handelt ...

Nun kann ich mir folgende Lösungen vorstellen:

Speichern Sie eine Referenz einer anonymen inneren Klasse in einem Feld (das wird höchstwahrscheinlich seinstatic final);Schreiben Sie eine neue Klasse, die implementiert wirdActionListener Schnittstelle.

Beispielcode für Lösung 1:

public static final MENU_ACTION_LISTENER = new ActionListener() {
    public void actionPerformed(ActionEvent e) {
        Navigator.showMenu();
    }
};

btnMenu.addActionListener(MENU_ACTION_LISTENER);

Beispielcode für Lösung 2:

// package-private, only GUI-package classes should be able to use it.
// most likely I won't ever need to subclass it, so why not making it final?
final class MenuActionListener implements ActionListener  {
    public void actionPerformed(ActionEvent e) {
        Navigator.showMenu();
    }
}

// now, wherever I need to use it:
btnMenu.addActionListener(new MenuActionListener());

Ich habe einige Zweifel an beiden Lösungen:

Wo können Verweise auf anonyme Aktionslistener gespeichert werden? Ich könnte eine Art Gebrauchsklasse haben (z.ActionListenersUtil) Wo speichere ich alle Action Listener, in denen ich wiederverwenden möchte?static final Felder, aber ich mag es nicht ... es scheint mir schlechtes Design.

Es macht mehr Sinn, folgt wohl am besten demBefehlsmuster... Ich hatte anfangs einige Zweifel an den Paketen ... Ich hätte gerne alle Listener in einem separaten Paket (z.com.myapp.gui für GUI-Elemente undcom.myapp.gui.listeners für Zuhörer. Aber als ich das aufschrieb, wurde mir klar, dass ich keine andere Wahl habe: der einzige Ort, an dem es Sinn macht, ist im selben Paket (weil sieMuss Paket-privat sein), auch wenn ich sie der Ordnung halber alle in ein separates Paket packen möchte. Ich habe jedoch immer noch Zweifel, da die meisten Aktionslistener wiederverwendbar sein können, selbst wenn sich die Benutzeroberfläche ändert. wäre es trotzdem eine gute idee, es im selben paket zu haben?

Eine andere Frage: Was ist der Unterschied zwischen AnrufenbtnMenu.addActionListener(MENU_ACTION_LISTENER); undbtnMenu.addActionListener(new MenuActionListener()); (in Bezug auf JVM, Laden von Klassen, Kompilieren von Klassen, von jeder Klasse belegter Speicher, Speicherbereinigung usw.)?

Bitte helfen Sie, ich bin gerade so verwirrt! :(

Antworten auf die Frage(1)

Ihre Antwort auf die Frage