Java-Programme durch PlugIns erweitern: Unterschied zwischen den Versionen
K (→Das PluginManager-Interface: -R) |
(→Implementierungen) |
||
Zeile 55: | Zeile 55: | ||
} | } | ||
</code=java> | </code=java> | ||
+ | |||
+ | ===PluginManager=== | ||
+ | Der Pluginmanager kann für zwei Aufgaben verwendet werden, einmal kann er dem Plugin übergeben werden und zusätzlich kann er die Kontrolle der Plugins übernehmen. Unser Pluginmanager übernimmt beide Aufgaben, daher implementiert er das PluginManager-Interface. Zusätzlich werden die Methoden ''loadPlugin'', ''start'' und ''stop'' implementiert. | ||
+ | <code=java> | ||
+ | public class PluginManagerImpl implements PluginManager{ | ||
+ | public void start(){ | ||
+ | ... | ||
+ | } | ||
+ | public void stop(){ | ||
+ | ... | ||
+ | } | ||
+ | public void loadPlugin(File file){ | ||
+ | ... | ||
+ | } | ||
+ | public void openWindow(String msg){ | ||
+ | ... | ||
+ | } | ||
+ | } | ||
+ | </code=java> | ||
+ | |||
+ | ====Start-Methode==== | ||
+ | Die ''start''-Methode wird aufgerufen, wenn die Anwendung gestartet wird und alle vorhandenen Plugins geladen werden sollen. Die Pfade zu den vorhandenen Plugins lassen sich z.B. extra speichern oder es wird gesagt alles was im Ordner '''plugins''' liegt gilt als Plugin. In unserem Fall wird gesagt was im Ordner '''plugins''' liegt wird geladen, dafür rufen wir nur die ''loadPlugin''-Methode auf. | ||
+ | <code=java> | ||
+ | public void start(){ | ||
+ | File[] files = new File("plugins").listFiles(); | ||
+ | for(File f:files) | ||
+ | loadPlugin(f); | ||
+ | } | ||
+ | </code=java> | ||
+ | |||
+ | ====LoadPlugin-Methode==== | ||
[[Kategorie:Tutorials (Java)]] | [[Kategorie:Tutorials (Java)]] |
Version vom 23. Oktober 2008, 06:52 Uhr
Damit Programme leicht um neue Teile erweitert werden können, ist es hilfreich diese mit einer Plugin-Schnittstelle auszustatten.
Inhaltsverzeichnis
Voraussetzungen
Als Voraussetzung für die Verwendung von Plugins sollten verschiedene Klassen und Interfaces vorhanden sein:
- Plugin-Interface - das die Plugins implementieren müssen. Hiermit wird festgelegt welche Funktionen das Plugin der Anwendung anbieten muss.
- Anwendung-Interface - das die Schnittstelle von den Plugins zur Anwendung darstellt, hiermit kann kontrolliert werden was die Anwendungen dürfen und was sie sehen.
- Manager - gesonderte Klasse für das Laden, Starten und Beenden der Plugins.
Die Interfaces
Das gesamte Plugin-System könnte auch ohne Interfaces geschrieben werden, jedoch ist dies unsicherer. Weil wenn dafür die Klassen der Anwendung eingebunden werden müssen und mit Entwicklungsumgebungen wie Eclipse kann der Programmierer alle Methoden sehen und auf diese zugreifen. Die Interfaces schließen dies nicht aus aber bilden eine saubere Trennung.
Das Plugin-Interface
Das Interface für die Plugins kann keine Methoden umfassen, aber auch viele verschiedene. Es sollte nach meiner derzeitigen Auffassung jedoch immer zwei Methoden besitzen start und stop. Außerdem eine Methode um die Manager-Klasse zu setzen, sollte das Plugin auf irgendwelche Eigenschaften der Anwendung zugreifen können. <code=java> public interface PluginInterface{
public boolean start(); public boolean stop(); public void setPluginManager(PluginManager manager); public void hello();
} </code=java> Zusätzlich wurde das Interface um die Methode hello erweitert, somit kann das Plugin von der Anwendung auch benachrichtigt werden.
Das PluginManager-Interface
Das Interface für den Pluginmanager bildet die Schnittstelle vom Plugin zur Anwendung, hier werden alle Methoden aufgeführt die das Plugin aufrufen darf. <code=java> public interface PluginManager{
public void openWindow(String msg);
} </code=java> Unser Pluginmanager erlaubt nur das Öffnen eines Fensters mit einem String als Nachricht.
Implementierungen
Durch die Interfaces muss für die Entwicklung des Plugins nur die Class- oder Java-Dateien weiter gegeben werden, die Implementierungen des PluginManagers dagegen nicht.
Hello-Plugin
Unser Plugin soll beim Aufruf der hello()-Methode nur ein Fenster öffnen und dort Hallo ausgeben, daher fällt die Implementierung sehr einfach aus. Die start()- und stop()-Methoden werden garnicht benötigt, würde der Text aus einer Datenbank oder Datei gelesen werden könnte dies in der start-Methode erledigt werden <code=java> public class HelloPlugin implements PluginInterface{
private PluginManager manager; public boolean start(){ System.out.println("ich starte"); return true; }
public boolean stop(){ System.out.println("ich stoppe"); return true; } public void setPluginManager(PluginManager manager){ this.manager = manager; } public void hello(){ manager.openWindow("hallo"); }
</code=java>
PluginManager
Der Pluginmanager kann für zwei Aufgaben verwendet werden, einmal kann er dem Plugin übergeben werden und zusätzlich kann er die Kontrolle der Plugins übernehmen. Unser Pluginmanager übernimmt beide Aufgaben, daher implementiert er das PluginManager-Interface. Zusätzlich werden die Methoden loadPlugin, start und stop implementiert. <code=java> public class PluginManagerImpl implements PluginManager{
public void start(){ ... } public void stop(){ ... } public void loadPlugin(File file){ ... } public void openWindow(String msg){ ... }
} </code=java>
Start-Methode
Die start-Methode wird aufgerufen, wenn die Anwendung gestartet wird und alle vorhandenen Plugins geladen werden sollen. Die Pfade zu den vorhandenen Plugins lassen sich z.B. extra speichern oder es wird gesagt alles was im Ordner plugins liegt gilt als Plugin. In unserem Fall wird gesagt was im Ordner plugins liegt wird geladen, dafür rufen wir nur die loadPlugin-Methode auf. <code=java> public void start(){
File[] files = new File("plugins").listFiles(); for(File f:files) loadPlugin(f);
} </code=java>