I'm having doubts about how to best construct the interface of a new class. There will be two other classes communicating with the new class, Platform
and Sensor
. The new class, Pathfinder
, will recieve sensor data from Sensor
and take any new data in account when calculating paths. Platform
is moving along the path created by Pathfinder
, but if Sensor
detects a threat, Pathfinder
will generate a new path which is to b开发者_运维技巧e used automatically by Platform
the next time it attempts to move.
The interface I've sketched up now looks like this in pseudo-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
}
I'm not really satisfied with how the platform will interact with the pathfinder. On the other hand, if I let the platform fetch the entire path, it will have to check periodically if something has changed, and potentially not often enough, thus walking into whatever threat is detected.
How can this design be improved?
You could use the design pattern "Observer".
Then the Platform object could subscribe to the Pathfinders events "Started recalculation" (immediately stop moving or go back or ...) and "Calculation finished". When there is a new path at the Pathfinder object, the Platform object can ask for the whole data at once.
精彩评论