この質問は、ここにある委任設計パターンに関するものです。
さまざまなエンティティを表すゲーム エンジン用のインターフェイスが多数あります。
- プレーヤー
- 車両
- メッシュ
- 等
これらはそれぞれレンダリングできるため、メソッドを含む Renderable インターフェイスを実装しますrender()
。
方法 1
委任を使用すると、例は次のようになります。
public interface Vehicle {
public void drive();
}
public class Car implements Vehicle {
public Renderable renderable;
@Override
public void drive() { // ... }
}
車をレンダリングしたいときはいつでも、 を呼び出すだけcar.renderable.render();
です。
この方法の問題は、リストを作成して反復処理できないことです。
方法 2
これを解決するために、Vehicle を Renderable に拡張することができます。
public interface Vehicle extends Renderable {
public void drive();
}
しかし、これの問題は、Car、Bicycle、Truck、Tank などを定義すると、これらのクラスのそれぞれに render() のコードを入力する必要があることです (これはおそらく同一です)。
Vehicle を実装するすべての具象クラスで render() を定義せずに、Vehicle インターフェイスで Renderable を拡張する利点を維持する方法はありますか?