package rmblworx.tools.timey;
/*
* Copyright 2014-2015 Christian Raue
* MIT License http://opensource.org/licenses/mit-license.php
*/
/**
* Aufruferimplementierung die das uebergebene Kommando ausfuehrt.
*
* @author mmatthies
* @param <T>
* Bennent den von der Methode {@link #execute()} erwarteten Rueckgabetyp
*/
class Invoker<T> {
/**
* Referenz auf die Komandoimplementierung.
*/
private ICommand fCommand;
/**
* Default constructor.
*/
public Invoker() {
super();
}
/**
* Erweiterter Konstruktor. Ermöglicht die direkte Angabe des vom Invoker auszuführenden Kommandos.
* Entspricht der Ausführung der folgenden Aufrufe.
* <p>
* <code>Invoker<T> invoker = new Invoker<T>();</code>
* </p>
* <p>
* <code>invoker.storeCommand(cmd);</code>
* </p>
*
* @param cmd
* Referenz der auszuführenden Kommandoimplementierung.
*/
public Invoker(final ICommand cmd) {
super();
this.fCommand = cmd;
}
/**
* @return den durch das jeweilige Kommando definierte Rueckgabewert.
*/
public final T execute() {
return this.fCommand.execute();
}
/**
* Setzt die Referenz der Kommandoimplementierung.
*
* @param cmd
* Referenz auf die Kommandoimplemetierung
*/
public final void storeCommand(final ICommand cmd) {
this.fCommand = cmd;
}
}