Muster: Java: NullPattern
Erscheinungsbild
Null Muster
[Bearbeiten]Implementiere einen leeren Algorithmus.
Implementierung (1)
[Bearbeiten] package de.bastie.eHunter.gui.action; <br>
import java.awt.event.ActionEvent;
import javax.swing.Icon;<br>
/**
* Null Pattern Implementation
* @author Bastie - Sebastian Ritter
* @licence FDL für Wikibooks
* @version 1.0
*/
class DefaultMenuAction extends ModelDrivenAbstractAction {
public DefaultMenuAction (final String text) {
this (text, null);
}
public DefaultMenuAction (final String text,
final Icon icon) {
super (text, icon);
}
// Hier ist die null action.
public void actionPerformed (final ActionEvent ignore) {
}
}
package de.bastie.eHunter.gui.action;<br>
import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.Icon;<br>
/**
* Diese Klasse dient dazu für alle anderen Action Objekte
* vordefinierte Methoden zur Verfügung zu stellen. Insbesondere
* sollen diese Zugriff auf das zugrundeliegende BO haben.
*
* Die <code><strong>~</strong></code> wird hierbei als Descriptor für
* den Mnemonic Key verwendet.
* @author Bastie - Sebastian Ritter
* @licence FDL für Wikibooks
* @version 1.0
*/
abstract class ModelDrivenAbstractAction extends AbstractAction {
public ModelDrivenAbstractAction (final String text) {
this (text, null);
}
public ModelDrivenAbstractAction (String menuText,
final Icon icon) {
super (menuText, icon);
final int mnemonicKeyDescriptor = menuText.indexOf('~');
if (mnemonicKeyDescriptor != -1) {
// Rausschneiden von ~
menuText = menuText.substring(0,mnemonicKeyDescriptor)
.concat(menuText.substring(mnemonicKeyDescriptor+1));
this.putValue(Action.MNEMONIC_KEY, new Integer (menuText.charAt(mnemonicKeyDescriptor)));
this.putValue(Action.NAME, menuText);
}
}
}
Erläuterungen
[Bearbeiten]Das vorstehende Beispiel zeigt Dir das NullPattern anhand einer einfachen Implementation für Swing Action Objekte für Menüs. Die eigentlich abstrakte Methode
public void actionPerformed (final ActionEvent e) {}
Anmerkung (1): Als kleines Bonbon habe ich noch die Basisklasse hinzugefügt, welche eine einfache Möglichkeit der Steuerung des Mnemonic-Zeichens anbietet.
Anmerkung (2): Die eigentliche Initialisierung erfolgt bei mir über einen Reflection Mechanismus zusammen mit einen Klassenfabrik, so dass beide Klassen entsprechend auf default
Sichtbarkeit eingeschränkt sind.
Anmerkung (3): Ich habe nicht den kompletten Quelltext hier dargestellt, da er zu umfangreich ist.