diff --git a/src/aliensimulator/AlienSimulator.java b/src/aliensimulator/AlienSimulator.java index 5a69d632147c0890812db54ff01583ae1e0e667f..8814e44924d1ae71f4f6339b32046747e29b6ef8 100644 --- a/src/aliensimulator/AlienSimulator.java +++ b/src/aliensimulator/AlienSimulator.java @@ -16,6 +16,13 @@ import aliensimulator.verhalten.ErdeNeutralAdapter; public class AlienSimulator { public static void main(String[] args) { + try { + Class.forName("aliensimulator.predators.HishQuTen"); + Class.forName("aliensimulator.predators.Yautja"); + } catch (Exception e) { + e.printStackTrace(); + } + AlienFactory alienFactory = new AlienFactory(); Alien alienMars = alienFactory.createAlien("mars"); diff --git a/src/aliensimulator/predators/HishQuTen.java b/src/aliensimulator/predators/HishQuTen.java index c65210b4965d8d2091327b5e72c929a3738c364e..b971f0f678cfdb9659ece1184af41470e17475c7 100644 --- a/src/aliensimulator/predators/HishQuTen.java +++ b/src/aliensimulator/predators/HishQuTen.java @@ -5,6 +5,10 @@ import aliensimulator.verhalten.ErdeNeutralAdapter; public class HishQuTen extends Predator { + static { + PredatorRegistry.register(new HishQuTen()); + } + public HishQuTen() { this.setErdeBesuchverhalten(new ErdeNeutralAdapter(new NeutralBesuchen())); } @@ -14,4 +18,8 @@ public class HishQuTen extends Predator { System.out.println("Ich bin ein Hish-Qu-Ten."); } + @Override + public Boolean canHandle(String type) { + return type.equalsIgnoreCase("hishquten"); + } } diff --git a/src/aliensimulator/predators/Predator.java b/src/aliensimulator/predators/Predator.java index 56bc7ed62aa9b06cf6acf75832f8514643781c7f..1ca555914686861b070ee5960af5f432b25d8ece 100644 --- a/src/aliensimulator/predators/Predator.java +++ b/src/aliensimulator/predators/Predator.java @@ -7,6 +7,8 @@ public abstract class Predator { public abstract void darstellen(); + public abstract Boolean canHandle(String type); + public void fliegen() { System.out.println("Ich fliege durch den Weltraum."); } diff --git a/src/aliensimulator/predators/PredatorFactory.java b/src/aliensimulator/predators/PredatorFactory.java index 66292227c83710177e0105822eb594f722bb44dd..e1c84e6fddb8bc47b9578aab0ef6ed21693217ef 100644 --- a/src/aliensimulator/predators/PredatorFactory.java +++ b/src/aliensimulator/predators/PredatorFactory.java @@ -1,23 +1,15 @@ package aliensimulator.predators; - -import java.io.IOException; -import java.util.Properties; - public class PredatorFactory { public Predator createPredator(String type) { Predator predator = null; - Properties properties = new Properties(); - try { - properties.load(this.getClass().getResourceAsStream("predator.properties")); - String className = properties.getProperty(type); - Class<?> classOfPredator = Class.forName(className); - predator = (Predator) classOfPredator.newInstance(); - } catch (IOException | ClassNotFoundException | InstantiationException | IllegalAccessException e) { - e.printStackTrace(); + predator = PredatorRegistry.getPredatorHandler(type); + if (predator == null) { + System.out.println("Kein Handler gefunden"); } + return predator; } } diff --git a/src/aliensimulator/predators/PredatorRegistry.java b/src/aliensimulator/predators/PredatorRegistry.java new file mode 100644 index 0000000000000000000000000000000000000000..e43f54abf6d50d2b05a38463dfd0f570292f942f --- /dev/null +++ b/src/aliensimulator/predators/PredatorRegistry.java @@ -0,0 +1,25 @@ +package aliensimulator.predators; + +import java.util.ArrayList; +import java.util.List; +import java.util.ListIterator; + +public class PredatorRegistry { + static List<Predator> predatorHandlers = new ArrayList<Predator>(); + + static void register(Predator predator) { + predatorHandlers.add(predator); + } + + static Predator getPredatorHandler(String type) { + ListIterator<Predator> iter = predatorHandlers.listIterator(); + while (iter.hasNext()) { + Predator predator = iter.next(); + if (predator.canHandle(type)) { + return predator; + } + } + return null; + } + +} diff --git a/src/aliensimulator/predators/Yautja.java b/src/aliensimulator/predators/Yautja.java index b7aee7571ffa2fde5d25a05cf5b8303ec0788283..d84de21816092836f71203512a5a2725d1dae84e 100644 --- a/src/aliensimulator/predators/Yautja.java +++ b/src/aliensimulator/predators/Yautja.java @@ -5,6 +5,10 @@ import aliensimulator.verhalten.ErdeZerstoererischAdapter; public class Yautja extends Predator { + static { + PredatorRegistry.register(new Yautja()); + } + public Yautja() { this.setErdeBesuchverhalten(new ErdeZerstoererischAdapter()); } @@ -14,4 +18,8 @@ public class Yautja extends Predator { System.out.println("Ich bin ein Yautja."); } + @Override + public Boolean canHandle(String type) { + return type.equalsIgnoreCase("yautja"); + } } diff --git a/src/aliensimulator/predators/predator.properties b/src/aliensimulator/predators/predator.properties deleted file mode 100644 index a1f5396a9b8cde58977be9f74eb2a680840745d0..0000000000000000000000000000000000000000 --- a/src/aliensimulator/predators/predator.properties +++ /dev/null @@ -1,2 +0,0 @@ -yautja=aliensimulator.predators.Yautja -hishquten=aliensimulator.predators.HishQuTen