这个问题是指在此处找到的委托设计模式。
我的游戏引擎有许多接口代表各种实体:
- 播放器
- 车辆
- 网
- 等等
并且每一个都可以渲染,因此它们实现了包含方法的 Renderable 接口render()
。
方法一
使用委托,示例如下所示:
public interface Vehicle {
public void drive();
}
public class Car implements Vehicle {
public Renderable renderable;
@Override
public void drive() { // ... }
}
每当我想渲染一辆车时,我只需调用car.renderable.render();
.
这种方法的问题是我无法创建一个 List 并遍历它。
方法二
为了解决这个问题,我可以让 Vehicle 扩展 Renderable:
public interface Vehicle extends Renderable {
public void drive();
}
但问题在于,如果我定义 Car、Bicycle、Truck、Tank 等,这些类中的每一个都必须填写 render() 的代码(这可能是相同的)。
有没有办法保持在我的 Vehicle 接口中扩展 Renderable 的好处,而不必在所有实现 Vehicle 的具体类中定义 render() ?