Wie lassen sich abhängig vom Ziel-Betriebssystem zur Laufzeit unterschiedliche Bibliotheken laden?
Das Beispiel enthält vier Klassen und ein Interface.
Strategy
ist die Hauptklasse mit der main-Methode
und lediglich einer weiteren Methode getInstance()
,
die ein ClassSelector
-Objekt zurück gibt. ClassSelector
ist ein Interface, das die Routinen (hier die Methode printOS()
)
enthält, die von den restlichen drei implementierenden
Klassen spezifiziert werden. In diesen wird zu
Demonstrationszwecken lediglich der String der ausführenden
Plattform ausgegeben.
Der 'Witz' des Patterns besteht darin, dass in class
Strategy
das jeweilige Betriebssystem abgefragt und
dann dementsprechend ein Objekt der hierfür speziell
ausgelegten Klasse erzeugt wird. Hierin ließen sich
natürlich beliebige weitere auf das jeweilige OS angepasste
Algorithmen formulieren.
public class Strategy {
public ClassSelector getInstance() {
final boolean isWin = System.getProperty("os.name").startsWith(
"Windows");
final boolean isMac = System.getProperty("os.name").startsWith("Mac");
final boolean isLinux = System.getProperty("os.name").startsWith(
"Linux");
if (isWin) {
return new WinImpl();
} else if (isMac) {
return new MacImpl();
} else if (isLinux) {
return new LinuxImpl();
} else {
System.out.println("OS nicht feststellbar");
}
return null;
}
public static void main(String[] args) {
Strategy str = new Strategy();
ClassSelector inter = str.getInstance();
inter.printOS();
}
}
class WinImpl implements ClassSelector {
public void printOS() {
System.out.println("Windows");
}
}
class MacImpl implements ClassSelector {
public void printOS() {
System.out.println("Mac OS X");
}
}
class LinuxImpl implements ClassSelector {
public void printOS() {
System.out.println("Linux");
}
}
interface ClassSelector {
public void printOS();
}
Wenn Ihnen javabeginners.de gefällt, freue ich mich über eine Spende an diese gemeinnützigen Organisationen.