diff --git a/lib/guava-21.0.jar b/lib/guava-21.0.jar new file mode 100644 index 0000000000000000000000000000000000000000..0618195945f19848b80cbdcc56d7f05d913c6f64 Binary files /dev/null and b/lib/guava-21.0.jar differ diff --git a/lib/guice-4.1.0-no_aop.jar b/lib/guice-4.1.0-no_aop.jar new file mode 100644 index 0000000000000000000000000000000000000000..5d19a30dd234b53193d68bf7b69862919c5024ff Binary files /dev/null and b/lib/guice-4.1.0-no_aop.jar differ diff --git a/lib/javax.inject-1.jar b/lib/javax.inject-1.jar new file mode 100644 index 0000000000000000000000000000000000000000..b2a9d0bf7bd463a6361898b36f010edd05c0cf6e Binary files /dev/null and b/lib/javax.inject-1.jar differ diff --git a/src/aliensimulator/AlienSimulator.java b/src/aliensimulator/AlienSimulator.java index 8814e44924d1ae71f4f6339b32046747e29b6ef8..ea112716c0add9c59aa6d6b0639b93397bc81686 100644 --- a/src/aliensimulator/AlienSimulator.java +++ b/src/aliensimulator/AlienSimulator.java @@ -6,12 +6,11 @@ import aliensimulator.aliens.*; import aliensimulator.predators.Predator; import aliensimulator.predators.PredatorFactory; import aliensimulator.predators.Yautja; -import aliensimulator.ufos.AlienUfoFactory; -import aliensimulator.ufos.PredatorUfoFactory; -import aliensimulator.ufos.Ufo; -import aliensimulator.ufos.UfoFactory; +import aliensimulator.ufos.*; import aliensimulator.verhalten.ErdeFreundlichBesuchen; import aliensimulator.verhalten.ErdeNeutralAdapter; +import com.google.inject.Guice; +import com.google.inject.Injector; public class AlienSimulator { @@ -62,13 +61,15 @@ public class AlienSimulator { yautja.fliegen(); yautja.erdeBesuchen(); - UfoFactory alienUfoFactory = new AlienUfoFactory(); + Injector i = Guice.createInjector(new KomponentenModul()); + + UfoFactory alienUfoFactory = i.getInstance(AlienUfoFactory.class); Ufo alienSternenkreuzer = alienUfoFactory.createUfo("sternenkreuzer"); System.out.println(alienSternenkreuzer); Ufo alienTransportschiff = alienUfoFactory.createUfo("transportschiff"); System.out.println(alienTransportschiff); - UfoFactory predatorUfoFactory = new PredatorUfoFactory(); + UfoFactory predatorUfoFactory = i.getInstance(PredatorUfoFactory.class); Ufo predatorSternenkreuzer = predatorUfoFactory.createUfo("sternenkreuzer"); System.out.println(predatorSternenkreuzer); Ufo predatorTransportschiff = predatorUfoFactory.createUfo("transportschiff"); diff --git a/src/aliensimulator/ufos/KomponentenModul.java b/src/aliensimulator/ufos/KomponentenModul.java new file mode 100644 index 0000000000000000000000000000000000000000..3eeedf3bcb134aab1f9c1ec7b71b1f9f7ba4cfe7 --- /dev/null +++ b/src/aliensimulator/ufos/KomponentenModul.java @@ -0,0 +1,19 @@ +package aliensimulator.ufos; + +import aliensimulator.ufos.komponenten.*; +import com.google.inject.AbstractModule; + +public class KomponentenModul extends AbstractModule { + + @Override + protected void configure() { + bind(KomponentenFabrik.class) + .annotatedWith(AlienKomponenten.class) + .to(AlienKomponentenFabrik.class); + + bind(KomponentenFabrik.class) + .annotatedWith(PredatorKomponenten.class) + .to(PredatorKomponentenFabrik.class); + } +} + diff --git a/src/aliensimulator/ufos/PredatorUfoFactory.java b/src/aliensimulator/ufos/PredatorUfoFactory.java index ef8c1257aab925af153f226627e9a531b61224f9..07cd4ee150db5331a6ed935839be06196b8f2cce 100644 --- a/src/aliensimulator/ufos/PredatorUfoFactory.java +++ b/src/aliensimulator/ufos/PredatorUfoFactory.java @@ -1,13 +1,19 @@ package aliensimulator.ufos; import aliensimulator.ufos.komponenten.KomponentenFabrik; +import aliensimulator.ufos.komponenten.PredatorKomponenten; import aliensimulator.ufos.komponenten.PredatorKomponentenFabrik; +import javax.inject.Inject; + public class PredatorUfoFactory implements UfoFactory { + + @Inject + private @PredatorKomponenten KomponentenFabrik komponentenFabrik; + @Override public Ufo createUfo(String type) { Ufo ufo = null; - KomponentenFabrik komponentenFabrik = new PredatorKomponentenFabrik(); switch (type) { case "sternenkreuzer" : diff --git a/src/aliensimulator/ufos/komponenten/AlienKomponenten.java b/src/aliensimulator/ufos/komponenten/AlienKomponenten.java new file mode 100644 index 0000000000000000000000000000000000000000..3017a16730c0951a7d7c510d22adc9baefa1c09e --- /dev/null +++ b/src/aliensimulator/ufos/komponenten/AlienKomponenten.java @@ -0,0 +1,15 @@ +package aliensimulator.ufos.komponenten; + +import static java.lang.annotation.ElementType.PARAMETER; +import static java.lang.annotation.ElementType.FIELD; +import static java.lang.annotation.ElementType.METHOD; +import static java.lang.annotation.RetentionPolicy.RUNTIME; + +import java.lang.annotation.Target; +import java.lang.annotation.Retention; +import javax.inject.Qualifier; + +@Qualifier +@Target({ FIELD, PARAMETER, METHOD }) +@Retention(RUNTIME) +public @interface AlienKomponenten {} \ No newline at end of file diff --git a/src/aliensimulator/ufos/komponenten/PredatorKomponenten.java b/src/aliensimulator/ufos/komponenten/PredatorKomponenten.java new file mode 100644 index 0000000000000000000000000000000000000000..3f05e75b4310c74a32a1fe7d48e2c63fd1677344 --- /dev/null +++ b/src/aliensimulator/ufos/komponenten/PredatorKomponenten.java @@ -0,0 +1,16 @@ +package aliensimulator.ufos.komponenten; + + +import static java.lang.annotation.ElementType.PARAMETER; +import static java.lang.annotation.ElementType.FIELD; +import static java.lang.annotation.ElementType.METHOD; +import static java.lang.annotation.RetentionPolicy.RUNTIME; + +import java.lang.annotation.Target; +import java.lang.annotation.Retention; +import javax.inject.Qualifier; + +@Qualifier +@Target({ FIELD, PARAMETER, METHOD }) +@Retention(RUNTIME) +public @interface PredatorKomponenten {} \ No newline at end of file