Wie ihr der Überschrift sicherlich schon entnommen habt, schlage ich mich grad mit dem Observer Pattern rum. Ich glaube die grundsätzliche Funktionsweise dieses Patterns verstanden zu haben, bin mir allerdings nicht so sicher, ob ich das hier sinnvoll implementiert habe.
Später möchte ich von außen auf die PlayGround Klasse zugreifen. Wenn ich die placeBomb(Player p) Methode aufrufe, dann wird die placeBomb Methode der Klasse Player aufgerufen, die wiederum die Bombe startet und sie in die Liste der gerade tickenden Bomben des entsprechenden Payers aufnimmt. Nach 4 Sekunden explodiert die Bombe, d.h. sie benachrichtigt Player sie wieder aus der Liste der gerade tickender Bomben rauszunehmen und sie benachrichtigt zusätzlich PlayGround, sodass dort die entsprechenden Maßnahmen getroffen werden.
Meine Frage an euch wäre jetzt erstmal, ob ich mit dieser Implementierung schon auf dem richtigen Wege bin, oder ob ich das ganze nochmal komplett anders machen sollte.
Später möchte ich von außen auf die PlayGround Klasse zugreifen. Wenn ich die placeBomb(Player p) Methode aufrufe, dann wird die placeBomb Methode der Klasse Player aufgerufen, die wiederum die Bombe startet und sie in die Liste der gerade tickenden Bomben des entsprechenden Payers aufnimmt. Nach 4 Sekunden explodiert die Bombe, d.h. sie benachrichtigt Player sie wieder aus der Liste der gerade tickender Bomben rauszunehmen und sie benachrichtigt zusätzlich PlayGround, sodass dort die entsprechenden Maßnahmen getroffen werden.
Meine Frage an euch wäre jetzt erstmal, ob ich mit dieser Implementierung schon auf dem richtigen Wege bin, oder ob ich das ganze nochmal komplett anders machen sollte.
Java:
public class PlayGround
implements Observer{
private Player player1;
private Player player2;
public PlayGround(int width, int height) {
player = new Player(); // default values
}
public void placeBomb(Player p){
p.placeBomb(this);
}
@Override
public void update(Observable o, Object arg1) {
Bomb b = (Bomb)arg1;
//explosionssachen machen
}
}
Java:
public class Player
implements Observer{
private List<Bomb> bombs;
public Player(){
bombs = new LinkedList<Bomb>();
}
@Override
public void update(Observable o, Object arg) {
bombs.remove((Bomb)arg);
}
public void placeBomb(PlayGround playG){
Bomb b = new Bomb(this, playG);
bombs.add(b);
b.start();
}
}
Java:
public class Bomb
implements Runnable{
Observable obs = new Observable();
private Point position;
public Bomb(Player owner, PlayGround playG) {
position = owner.getPosition();
obs.addObserver(owner);
obs.addObserver(playG);
}
public void start(){
run();
}
public void run(){
try{
Thread.sleep(4000);
}catch(InterruptedException ie){
System.out.println("Da hat mich was beim schlafen gestört !");
ie.printStackTrace();
}
obs.notifyObservers(this);
}