Класс дизайн интерфейса беды - PullRequest
1 голос
/ 17 августа 2011

У меня есть сомнения по поводу того, как наилучшим образом построить интерфейс нового класса. Будет два других класса, взаимодействующих с новым классом, Platform и Sensor. Новый класс Pathfinder будет получать данные датчика от Sensor и учитывать любые новые данные при расчете путей. Platform движется по пути, созданному Pathfinder, но если Sensor обнаружит угрозу, Pathfinder создаст новый путь, который будет автоматически использоваться Platform при следующей попытке переместиться.

Интерфейс, который я набросал, теперь выглядит так в псевдо-C ++:

class Sensor {
    Detect() {
        // Get Data
        Pathfinder.Process(Data)
    }
}

class Platform {
    Move() {
        while(Can move further)
            Waypoint w = Pathfinder.GetNextWaypoint()
            // Move towards w
            if(Arrived at w)
                Pathfinder.PassedWaypoint()
    }
}

class Pathfinder {
    Process(Data) {
         // Adapt path to accomodate Data
         RecalculatePath()
    }
    GetNextWaypoint() {
         if(!Path calculated)
             RecalculatePath()
         return Path.front()
    }
    PassedWaypoint() {
         Path.pop_front()
    }
    RecalculatePath() {
         // Do pathfinding
    }
    vector<Waypoint> Path
}

Я не очень доволен тем, как платформа будет взаимодействовать с указателем пути. С другой стороны, если я позволю платформе извлекать весь путь, она должна будет периодически проверять, изменилось ли что-то, и, возможно, не достаточно часто, таким образом, идя в любую обнаруженную угрозу.

Как улучшить этот дизайн?

1 Ответ

1 голос
/ 17 августа 2011

Вы можете использовать шаблон проектирования "Наблюдатель" .

Тогда объект Platform может подписаться на события Pathfinders «Начать пересчет» (немедленно прекратить движение или вернуться назад или ...) и «Расчет завершен». При наличии нового пути к объекту Pathfinder объект Platform может запрашивать все данные одновременно.

...