Java Reference
In-Depth Information
geschilderte Experiment für das Views-Plugin zeigte. Dies gilt allerdings nicht für unser
CounterView-Plugin aus Abschnitt 10.3. Dieses Plugin ist viel zu fl eißig, denn es lädt bei der
Initialisierung alle Funktionsklassen und erzeugt Objekte davon. Auch wenn es in unserem
Beispiel nur um wenige kleine Plugins geht, wollen wir im Folgenden unserem Plugin das
Faulenzen beibringen, um die Technik des „Lazy Extension Processing“ anhand eines Bei-
spiels zu illustrieren. Wir schreiben dazu die Klasse FunctionProxy (s. Listing 10.6), die
wie alle Function-Klassen die Schnittstelle Function (s. Listing 10.1) implementiert. Diese
Klasse ist, wie der Namen ausdrückt, ein Proxy für das Objekt, das die eigentliche Funktion
realisiert. Die Methode compute delegiert den Aufruf einfach an das Objekt der eigentlichen
Funktionsklasse. Allerdings wird dieses Objekt erst bei der ersten Anwendung der Methode
compute auf ein Proxy-Objekt erzeugt.
Listing 10.6 Klasse FunctionProxy
package javacomp.eclipse.plugin1;
import org.eclipse.core.runtime.*;
class FunctionProxy implements Function
{
private IConfigurationElement element;
private String classAttribute;
private Function realFunction = null;
public FunctionProxy(IConfigurationElement element,
String classAttribute)
{
this.element = element;
this.classAttribute = classAttribute;
}
public int compute(int x)
{
try
{
getRealFunction();
}
catch(Exception e)
{
System.err.println(e.getMessage());
e.printStackTrace();
throw new IllegalArgumentException("cannot get " +
"real function");
}
return realFunction.compute(x);
}
private void getRealFunction() throws Exception
{
if(realFunction != null)
{
return;
}
Object callback =
element.createExecutableExtension(classAttribute);
 
Search WWH ::




Custom Search