Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
ich habe eine Anforderung, in der zwei Klassen sehr stark voneinander abhängen.
Eine direkten Verweis von jeweils der einen Klasse auf die andere möchte ich jedoch vermeiden. Ich würde gerne der einen Klasse nur ein Interface der anderen Klasse zur Verfügung stellen.
Gibt es für diesen Anwendungsfall ein Design Pattern?
Wenn du kein DI einsetzen willst würd ich auf den ersten Blick Mediator sagen... zwei Objekte sollen nicht miteinander... dann muss ein Vermittler her...
Vielleicht wäre es gut, wenn ich meinen Anwendungsfall genauer schildern würde:
Konkret geht es um ein Spiel, in dem es verschiedene Level gibt. Diese Level sind aus verschiedenen Gründen hart in die Software einprogrammiert.
Vereinfacht gibt es also eine "Game"-Klasse und mehrere Level-Klassen "Level1", "Level2", usw. und bisher ein Interface "Level". Ein Level hat beispielsweise die Kontrolle darüber, wann neue Gegner auftauchen...
Java:
public class Game {
private Level currentLevel;
private List<Enemy> enemies;
public void newEnemy() {
enemies.add(new Enemy());
}
}
public interface Level {
}
public class Level1 implements Level {
}
public class Level2 implements Level {
}
Die Abstraktion der verschieden Levels habe ich schon über das Interface "Level".
Jetzt möchte ich auch vermeiden, dass "Level1" und "Level2" eine Referenz auf "Game" halten müssen, um die Methode "newEnemy()" aufzurufen. Instinktiv hätte ich nun nur ein Interface von "Game" in die Levels gereicht.
Java:
public class Game implements PassendesPattern {
private Level currentLevel;
private List<Enemy> enemies;
public void newEnemy() {
enemies.add(new Enemy());
}
}
public interface Level {
public void doSomething();
}
public class Level1 implements Level {
PassendesPattern pattern;
public void doSomething() {
pattern.newEnemy();
}
}
public class Level2 implements Level {
PassendesPattern pattern;
public void doSomething() {
pattern.newEnemy();
}
}
Dazu suche ich jetzt ein Pattern... Ich dachte auch schon an ein Delegate, das ist allerdings unüblich gegen ein Interface ("Level"), oder?
Das sieht doch eher nach einem Observer-/Listener-Pattern aus. Das Pattern findest du z.B. in MVC wieder, wie hier gezeigt. MVC kannst du auch gut benutzen um die einzelnen Ebenen des Spiels zu abstrahieren, wobei du im Model wohl noch mal einen Observer einbauen kannst um zwischen den einzelnen Levels zu abstrahieren.