From 1b1442d0f4a25743d279c88c9daab9dac5a32d6a Mon Sep 17 00:00:00 2001 From: Peter Hertkorn <peter.hertkorn@reutlingen-university.de> Date: Thu, 12 Nov 2020 21:45:00 +0100 Subject: [PATCH] Creatures with factories --- lib/aliens_3rdparty.jar | Bin 0 -> 1784 bytes src/aliensimulator/AlienSimulator.java | 55 ++++++++++++++++++ src/aliensimulator/aliens/Alien.java | 26 +++++++++ src/aliensimulator/aliens/AlienAdapter.java | 24 ++++++++ src/aliensimulator/aliens/AlienFactory.java | 18 ++++++ src/aliensimulator/aliens/AlienMars.java | 14 +++++ src/aliensimulator/aliens/AlienMond.java | 14 +++++ src/aliensimulator/aliens/AlienVenus.java | 14 +++++ src/aliensimulator/predators/HishQuTen.java | 17 ++++++ src/aliensimulator/predators/Predator.java | 26 +++++++++ .../predators/PredatorFactory.java | 13 +++++ src/aliensimulator/predators/Yautja.java | 17 ++++++ .../verhalten/ErdeBesuchverhalten.java | 6 ++ .../verhalten/ErdeFeindlichBesuchen.java | 6 ++ .../verhalten/ErdeFreundlichBesuchen.java | 8 +++ .../verhalten/ErdeNeutralAdapter.java | 17 ++++++ .../verhalten/ErdeZerstoererischAdapter.java | 11 ++++ src/readme.txt | 1 - 18 files changed, 286 insertions(+), 1 deletion(-) create mode 100644 lib/aliens_3rdparty.jar create mode 100644 src/aliensimulator/AlienSimulator.java create mode 100644 src/aliensimulator/aliens/Alien.java create mode 100644 src/aliensimulator/aliens/AlienAdapter.java create mode 100644 src/aliensimulator/aliens/AlienFactory.java create mode 100644 src/aliensimulator/aliens/AlienMars.java create mode 100644 src/aliensimulator/aliens/AlienMond.java create mode 100644 src/aliensimulator/aliens/AlienVenus.java create mode 100644 src/aliensimulator/predators/HishQuTen.java create mode 100644 src/aliensimulator/predators/Predator.java create mode 100644 src/aliensimulator/predators/PredatorFactory.java create mode 100644 src/aliensimulator/predators/Yautja.java create mode 100644 src/aliensimulator/verhalten/ErdeBesuchverhalten.java create mode 100644 src/aliensimulator/verhalten/ErdeFeindlichBesuchen.java create mode 100644 src/aliensimulator/verhalten/ErdeFreundlichBesuchen.java create mode 100644 src/aliensimulator/verhalten/ErdeNeutralAdapter.java create mode 100644 src/aliensimulator/verhalten/ErdeZerstoererischAdapter.java delete mode 100644 src/readme.txt diff --git a/lib/aliens_3rdparty.jar b/lib/aliens_3rdparty.jar new file mode 100644 index 0000000000000000000000000000000000000000..6952e0b840cab170face2cb2e218047c4fa676f0 GIT binary patch literal 1784 zcmWIWW@Zs#;Nak3Sdh2ahXDzQFt9NAx`sIFdiuHP`#So0y1532==r++JH^28+4sz8 zA8%c~i@e^tTIbH3-yCFc#rVO~M^Bj;0=(HdHq|q|lLi_k3B&<7El>r@Cgx<O<`u^q z7o`*=7L`=$`=yqa6eZ?3r52YaXQbxoCFdj-7q<qS_B(7KAanVW$-;ma&E{M7GPXZq z5NcQAQz-0W(CpAIYI2QL<tvgEn9s^S!QumBjYyJkKqUvKeA%AOyB|mH-)Fm@;fCY! zLoCki$AeZ}Ji2Y)o@cl2R329{o^_l(X^JcJLY*m+Y3+a7stv=#?|E8?OiWzy##8mI zopWaL=Q#^&X2fx^tKKm6S#&7i`%<CfkwRRx#|}prnEWw$^wILV(Rurmn<P&NI-mc4 z+-?5CQ-`CqI8&3wc)5%1Ygo&bl_yEf%9yy^M7cY6zsBh+)>ngO9>_R2xlZ)+6V(nj zo8Y@HFY*pOUiW$zpV-En#Lk63k4NxoN2G38SF9DLvhQJi^&NrQtLN<xabEIqf8_D( z_SU-GhtHH>G|DL13zsauzbGT{nV`|3lWWyO-gj?u-WW7N)hBRGt%-o2u+f>G_Hu5+ z19c92FV-D7G`+!j#_5oiAH9#rb*~Yf`}#d7sv@VX*dM_Nj4CF4QKg6_svJR4=T?-T z>lX=$rrHU<{<j?j+V1x{%go-=vLxV^%9VnLj}zoqTyYi<S|!4H(o1`3*A(GfEv-6R z_hxKXJas;cKjhUy`v&>e8KxclnydIfzdLiz?sHY%`+xtKKS<uz<Kp3+=P}XOkN?X} z(d%h)vbXmv4!tG2L&GRU|EFoc(7afe`)$*cQY5_EjV3?qIC%5!Yh#i9tBfBWZVW#t z<i(@C@r+CPEWXx%2irRnRvgVbGTH9>rDy#|7fGJxbk_dY-)gqi_gL1mg<Z3{uZGuE zeeM*@WG&sJte@p|?b@S1QLA3;o;LHPq;AD6z2vzID>qGMOVeqpi7D{=vp_rTpu@}g z3;TI%N<KC&+{X~$$n4AZ{nWHcJ;&Z0)6bF6ir?~9YtHACxMS*VU;T`hCnbc~8HH+b zA2LY!P@T2PeUb88wpIH7Otv`WG%9SE@2q}H&2{>wjwuuM-u`#|DK5+PL37%tMa`*Q zQ`^}tnJ?kVpD$OxFt7Ug-(z06Z`t0@XS7>c8?x+KddGK`Ox?B|y@m>wkK#^Edx~Gn zfnqgOl$E<37^_uyV^s%BtVX346_@0v7Nr(t7AI$*=EL5AlU~e@0=2nGYR1QO-&ODN z_%gv#qoSiCK%m93wS!&%(o7M*(@Wf|th)Y9l@qb~!B{sX!uZ{TgLYS5--_G2YWnr% z=?u~lMHkdJC?&gE*+!es_0D|LTkoZ|l~dA4i+8cCS9PMxEyuuwCr)vm_S1gdvCoMQ z$YAw~_R`+18?a*iJPwia$$XU>2i7i-S8aUgkZJXz^ma;Ls<m2U)`S)#yNPb8|J*lZ zC{N|O()@pACfAPb^CiWVS6E5>UAn$>a@4CZgSNtJ)4oK!a+$C^^pU*e(%jQhlkTQT zPG;i%ofxuP?eapYj}5m(CD$H0F=?Ht6fghf8Knlw2H)77S&L_g7wBycSX1d|`(xqZ zq91!^-aVGBYAbwc-YKzpzpFR8UF%HUke0H(zrMzO8(+2E;)FNx)h<8v{Ht@kD>pPS zZkzg@>6oKi<HGgN&d%W}cyAapx8lGR^Ty*dE>79`VfK-~N|7hD#qWcQ&!ao|+){wC zX9bQuMkWykL<x;tw1P@#RDi3z4)8`b1v%G)ieUsu1Tu*#l+leuPI92)0s(k{-at1J mqwqjC4mk`!=@bDTF=HBsFVzNkv$BD7vjCwJFjN<?f_MNC52|he literal 0 HcmV?d00001 diff --git a/src/aliensimulator/AlienSimulator.java b/src/aliensimulator/AlienSimulator.java new file mode 100644 index 0000000..b355177 --- /dev/null +++ b/src/aliensimulator/AlienSimulator.java @@ -0,0 +1,55 @@ +package aliensimulator; + +import aliens_3rdparty.AlienFromNY; +import aliens_3rdparty.NeutralBesuchen; +import aliensimulator.aliens.*; +import aliensimulator.predators.Predator; +import aliensimulator.predators.PredatorFactory; +import aliensimulator.predators.Yautja; +import aliensimulator.verhalten.ErdeFreundlichBesuchen; +import aliensimulator.verhalten.ErdeNeutralAdapter; + +public class AlienSimulator { + + public static void main(String[] args) { + AlienFactory alienFactory = new AlienFactory(); + + Alien alienMars = alienFactory.createAlien("mars"); + alienMars.darstellen(); + alienMars.fliegen(); + + // Änderung zur Laufzeit des Verhaltens des Aliens vom Mars + System.out.println("Verhalten vom Alien vom Mars VOR der Änderung seines Verhaltens:"); + alienMars.erdeBesuchen(); + System.out.println("Verhalten vom Alien vom Mars NACH der Änderung seines Verhaltens:"); + alienMars.setErdeBesuchverhalten(new ErdeFreundlichBesuchen()); + alienMars.erdeBesuchen(); + + Alien alienMond = alienFactory.createAlien("mond"); + alienMond.darstellen(); + alienMond.fliegen(); + alienMond.erdeBesuchen(); + + Alien alienVenus = alienFactory.createAlien("venus"); + alienVenus.darstellen(); + alienVenus.fliegen(); + alienVenus.erdeBesuchen(); + + Alien alienFromNY = alienFactory.createAlien("ny"); + alienFromNY.darstellen(); + alienFromNY.fliegen(); + System.out.println("Verhalten vom Alien von NY VOR der Änderung seines Verhaltens:"); + alienFromNY.erdeBesuchen(); + alienFromNY.setErdeBesuchverhalten(new ErdeNeutralAdapter(new NeutralBesuchen())); + System.out.println("Verhalten vom Alien von NY NACH der Änderung seines Verhaltens:"); + alienFromNY.erdeBesuchen(); + + PredatorFactory predatorFactory = new PredatorFactory(); + + Predator yautja = predatorFactory.createPredator("yautja"); + yautja.darstellen(); + yautja.fliegen(); + yautja.erdeBesuchen(); + + } +} diff --git a/src/aliensimulator/aliens/Alien.java b/src/aliensimulator/aliens/Alien.java new file mode 100644 index 0000000..8f3385a --- /dev/null +++ b/src/aliensimulator/aliens/Alien.java @@ -0,0 +1,26 @@ +package aliensimulator.aliens; + +import aliensimulator.verhalten.ErdeBesuchverhalten; + +public abstract class Alien { + + private ErdeBesuchverhalten erdeBesuchverhalten; + + public abstract void darstellen(); + + public void fliegen() { + System.out.println("Ich fliege durch den Weltraum."); + } + + public void erdeBesuchen(){ + erdeBesuchverhalten.erdeBesuchen(); + } + + public ErdeBesuchverhalten getErdeBesuchverhalten() { + return erdeBesuchverhalten; + } + + public void setErdeBesuchverhalten(ErdeBesuchverhalten erdeBesuchverhalten) { + this.erdeBesuchverhalten = erdeBesuchverhalten; + } +} diff --git a/src/aliensimulator/aliens/AlienAdapter.java b/src/aliensimulator/aliens/AlienAdapter.java new file mode 100644 index 0000000..a3c429f --- /dev/null +++ b/src/aliensimulator/aliens/AlienAdapter.java @@ -0,0 +1,24 @@ +package aliensimulator.aliens; + +import aliens_3rdparty.AlienFromNY; +import aliensimulator.verhalten.ErdeZerstoererischAdapter; + +public class AlienAdapter extends Alien { + + private AlienFromNY alienFromNY; + + public AlienAdapter(AlienFromNY alienNY) { + this.alienFromNY = alienNY; + this.setErdeBesuchverhalten(new ErdeZerstoererischAdapter()); + } + + @Override + public void darstellen() { + alienFromNY.show(); + } + + @Override + public void fliegen() { + alienFromNY.fly(); + } +} diff --git a/src/aliensimulator/aliens/AlienFactory.java b/src/aliensimulator/aliens/AlienFactory.java new file mode 100644 index 0000000..3dac451 --- /dev/null +++ b/src/aliensimulator/aliens/AlienFactory.java @@ -0,0 +1,18 @@ +package aliensimulator.aliens; + +import aliens_3rdparty.AlienFromNY; + +public class AlienFactory { + + public Alien createAlien(String type) { + if (type.equals("mars")) { + return new AlienMars(); + } else if (type.equals("mond")) { + return new AlienMond(); + } else if (type.equals("venus")) { + return new AlienVenus(); + } else if (type.equals("ny")) { + return new AlienAdapter(new AlienFromNY()); + } else return null; +} +} diff --git a/src/aliensimulator/aliens/AlienMars.java b/src/aliensimulator/aliens/AlienMars.java new file mode 100644 index 0000000..73c3090 --- /dev/null +++ b/src/aliensimulator/aliens/AlienMars.java @@ -0,0 +1,14 @@ +package aliensimulator.aliens; + +import aliensimulator.verhalten.ErdeFeindlichBesuchen; + +public class AlienMars extends Alien { + + public AlienMars(){ + this.setErdeBesuchverhalten(new ErdeFeindlichBesuchen()); + } + + public void darstellen() { + System.out.println("Ich bin das Alien vom Mars."); + } +} diff --git a/src/aliensimulator/aliens/AlienMond.java b/src/aliensimulator/aliens/AlienMond.java new file mode 100644 index 0000000..60a5c81 --- /dev/null +++ b/src/aliensimulator/aliens/AlienMond.java @@ -0,0 +1,14 @@ +package aliensimulator.aliens; + +import aliensimulator.verhalten.ErdeFreundlichBesuchen; + +public class AlienMond extends Alien { + + public AlienMond(){ + this.setErdeBesuchverhalten(new ErdeFreundlichBesuchen()); + } + + public void darstellen() { + System.out.println("Ich bin das Alien vom Mond."); + } +} diff --git a/src/aliensimulator/aliens/AlienVenus.java b/src/aliensimulator/aliens/AlienVenus.java new file mode 100644 index 0000000..1768907 --- /dev/null +++ b/src/aliensimulator/aliens/AlienVenus.java @@ -0,0 +1,14 @@ +package aliensimulator.aliens; + +import aliensimulator.verhalten.ErdeFreundlichBesuchen; + +public class AlienVenus extends Alien { + + public AlienVenus(){ + this.setErdeBesuchverhalten(new ErdeFreundlichBesuchen()); + } + + public void darstellen() { + System.out.println("Ich bin das Alien von der Venus."); + } +} diff --git a/src/aliensimulator/predators/HishQuTen.java b/src/aliensimulator/predators/HishQuTen.java new file mode 100644 index 0000000..c65210b --- /dev/null +++ b/src/aliensimulator/predators/HishQuTen.java @@ -0,0 +1,17 @@ +package aliensimulator.predators; + +import aliens_3rdparty.NeutralBesuchen; +import aliensimulator.verhalten.ErdeNeutralAdapter; + +public class HishQuTen extends Predator { + + public HishQuTen() { + this.setErdeBesuchverhalten(new ErdeNeutralAdapter(new NeutralBesuchen())); + } + + @Override + public void darstellen() { + System.out.println("Ich bin ein Hish-Qu-Ten."); + } + +} diff --git a/src/aliensimulator/predators/Predator.java b/src/aliensimulator/predators/Predator.java new file mode 100644 index 0000000..56bc7ed --- /dev/null +++ b/src/aliensimulator/predators/Predator.java @@ -0,0 +1,26 @@ +package aliensimulator.predators; + +import aliensimulator.verhalten.ErdeBesuchverhalten; + +public abstract class Predator { + private ErdeBesuchverhalten erdeBesuchverhalten; + + public abstract void darstellen(); + + public void fliegen() { + System.out.println("Ich fliege durch den Weltraum."); + } + + public void erdeBesuchen(){ + erdeBesuchverhalten.erdeBesuchen(); + } + + public ErdeBesuchverhalten getErdeBesuchverhalten() { + return erdeBesuchverhalten; + } + + public void setErdeBesuchverhalten(ErdeBesuchverhalten erdeBesuchverhalten) { + this.erdeBesuchverhalten = erdeBesuchverhalten; + } + +} diff --git a/src/aliensimulator/predators/PredatorFactory.java b/src/aliensimulator/predators/PredatorFactory.java new file mode 100644 index 0000000..14ad9e3 --- /dev/null +++ b/src/aliensimulator/predators/PredatorFactory.java @@ -0,0 +1,13 @@ +package aliensimulator.predators; + + +public class PredatorFactory { + + public Predator createPredator(String type) { + if (type.equals("yautja")) { + return new Yautja(); + } else if (type.equals("hishquten")) { + return new HishQuTen(); + } else return null; + } +} diff --git a/src/aliensimulator/predators/Yautja.java b/src/aliensimulator/predators/Yautja.java new file mode 100644 index 0000000..b7aee75 --- /dev/null +++ b/src/aliensimulator/predators/Yautja.java @@ -0,0 +1,17 @@ +package aliensimulator.predators; + +import aliens_3rdparty.ZerstoererischBesuchen; +import aliensimulator.verhalten.ErdeZerstoererischAdapter; + +public class Yautja extends Predator { + + public Yautja() { + this.setErdeBesuchverhalten(new ErdeZerstoererischAdapter()); + } + + @Override + public void darstellen() { + System.out.println("Ich bin ein Yautja."); + } + +} diff --git a/src/aliensimulator/verhalten/ErdeBesuchverhalten.java b/src/aliensimulator/verhalten/ErdeBesuchverhalten.java new file mode 100644 index 0000000..8228a5b --- /dev/null +++ b/src/aliensimulator/verhalten/ErdeBesuchverhalten.java @@ -0,0 +1,6 @@ +package aliensimulator.verhalten; + +public interface ErdeBesuchverhalten { + + public void erdeBesuchen(); +} diff --git a/src/aliensimulator/verhalten/ErdeFeindlichBesuchen.java b/src/aliensimulator/verhalten/ErdeFeindlichBesuchen.java new file mode 100644 index 0000000..4458d61 --- /dev/null +++ b/src/aliensimulator/verhalten/ErdeFeindlichBesuchen.java @@ -0,0 +1,6 @@ +package aliensimulator.verhalten; + +public class ErdeFeindlichBesuchen implements ErdeBesuchverhalten{ + + public void erdeBesuchen() { System.out.println("Ich besuche die Erde. Die Menschen schmecken gut."); } +} diff --git a/src/aliensimulator/verhalten/ErdeFreundlichBesuchen.java b/src/aliensimulator/verhalten/ErdeFreundlichBesuchen.java new file mode 100644 index 0000000..a3f1ea4 --- /dev/null +++ b/src/aliensimulator/verhalten/ErdeFreundlichBesuchen.java @@ -0,0 +1,8 @@ +package aliensimulator.verhalten; + +public class ErdeFreundlichBesuchen implements ErdeBesuchverhalten { + + public void erdeBesuchen (){ + System.out.println("Ich besuche die Erde. Die Menschen sind wundervoll."); + }; +} diff --git a/src/aliensimulator/verhalten/ErdeNeutralAdapter.java b/src/aliensimulator/verhalten/ErdeNeutralAdapter.java new file mode 100644 index 0000000..12922cb --- /dev/null +++ b/src/aliensimulator/verhalten/ErdeNeutralAdapter.java @@ -0,0 +1,17 @@ +package aliensimulator.verhalten; + +import aliens_3rdparty.NeutralBesuchen; + +public class ErdeNeutralAdapter implements ErdeBesuchverhalten { + + private NeutralBesuchen neutralBesuchen; + + public ErdeNeutralAdapter(NeutralBesuchen neutralBesuchen) { + this.neutralBesuchen = neutralBesuchen; + } + + @Override + public void erdeBesuchen() { + neutralBesuchen.abwarten(); + } +} diff --git a/src/aliensimulator/verhalten/ErdeZerstoererischAdapter.java b/src/aliensimulator/verhalten/ErdeZerstoererischAdapter.java new file mode 100644 index 0000000..1c4d9a2 --- /dev/null +++ b/src/aliensimulator/verhalten/ErdeZerstoererischAdapter.java @@ -0,0 +1,11 @@ +package aliensimulator.verhalten; + +import aliens_3rdparty.ZerstoererischBesuchen; + +public class ErdeZerstoererischAdapter extends ZerstoererischBesuchen implements ErdeBesuchverhalten { + + @Override + public void erdeBesuchen() { + zerstoere(); + } +} diff --git a/src/readme.txt b/src/readme.txt deleted file mode 100644 index 1724e3d..0000000 --- a/src/readme.txt +++ /dev/null @@ -1 +0,0 @@ -Source Code für die Beispiele und Übungsaufgaben \ No newline at end of file -- GitLab