Skip to content
Snippets Groups Projects
Commit 1b1442d0 authored by Peter Hertkorn's avatar Peter Hertkorn
Browse files

Creatures with factories

parent c6a0a5bf
No related branches found
No related tags found
No related merge requests found
Showing
with 286 additions and 1 deletion
File added
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();
}
}
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;
}
}
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();
}
}
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;
}
}
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.");
}
}
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.");
}
}
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.");
}
}
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.");
}
}
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;
}
}
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;
}
}
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.");
}
}
package aliensimulator.verhalten;
public interface ErdeBesuchverhalten {
public void erdeBesuchen();
}
package aliensimulator.verhalten;
public class ErdeFeindlichBesuchen implements ErdeBesuchverhalten{
public void erdeBesuchen() { System.out.println("Ich besuche die Erde. Die Menschen schmecken gut."); }
}
package aliensimulator.verhalten;
public class ErdeFreundlichBesuchen implements ErdeBesuchverhalten {
public void erdeBesuchen (){
System.out.println("Ich besuche die Erde. Die Menschen sind wundervoll.");
};
}
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();
}
}
package aliensimulator.verhalten;
import aliens_3rdparty.ZerstoererischBesuchen;
public class ErdeZerstoererischAdapter extends ZerstoererischBesuchen implements ErdeBesuchverhalten {
@Override
public void erdeBesuchen() {
zerstoere();
}
}
Source Code für die Beispiele und Übungsaufgaben
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment