Как писать твердые игровые объекты чистой агрегации (композиции) на Java?

Итак, я только начинаю писать игру на Java и пишу свои игровые объекты. Я прочитал здесь, в Evolve Your Hierarchy , что вы должны строить свои игры как композиции, а не как большую иерархию классов. Как показано на этом изображении из предыдущей ссылки:

enter image description here

Однако, когда я фактически перехожу к реализации, у меня возникает один небольшой вопрос о том, где применять интерфейсы.

Допустим, у вас есть класс Player и интерфейсы Moveable и Renderable. . Вы реализуете это, используя переменные общедоступного интерфейса:

class Player {
    public Moveable moveable;
    public Renderable renderable;
}

class GenericMoveable implements Moveable {
    // Function implementations
}

class PlayerRenderable implements Renderable {
    // Function implementations
}   

Или вы пытаетесь сделать это, применяя интерфейсы непосредственно к объекту:

class Player implements Moveable, Renderable {
    private GenericMoveable genericMoveable;

    // Non-direct Implementation of Moveable
    void someMoveFunc(double x, double y) {
        genericMoveable.someMoveFunc(x, y);
    }

    // Direct implementation of Renderable
    void someRenderableFunction() {
        // Player class specific code
    }
}

class GenericMoveable implements Moveable {
    // Function implementations
}

В настоящее время я чувствую, что второй метод лучше. Основная причина этого в том, что я могу создавать следующие списки:

List renderObjects; // use this to draw all of the objects to the screen
List moveObjects; // use this to move all objects at once

Мне действительно просто нужно подтверждение, что я на правильном пути. Я почти уверен, что при создании игровых объектов по композиции для игр на Java вы хотите применить интерфейсы непосредственно к рассматриваемому игровому объекту, а затем использовать частные интерфейсы, если они вам нужны, и прямую реализацию этих функций для остальных. Это правильно? И каковы положительные и отрицательные стороны того, что я делаю?

Хотя, пока мы здесь, на что еще мне нужно обратить внимание при реализации композиционных игровых объектов на Java? Что мне делать иначе? Заранее благодарим за любые ответы, я благодарен за любую помощь.

9
задан Robert Massaioli 5 April 2011 в 02:58
поделиться