Я застрял в попытке решить что-то в дизайне моего класса.Вот обзор того, что мне нужно спроектировать:
- Робот, который рисует блоки на квадратной сетке (сетка - это набор из n блоков).
- Допустим, в сетке есть 4 типа блоков, и каждый блок может стоить разную сумму для рисования.
- Пользователь введет команду, чтобы указать роботу, какой блок рисовать.
- Если блок уже нарисован, за перерисовку будет наложен штраф.
- Наконец, укажите общую стоимость (с разбивкой по типам блоков) и команды, выданные пользователем.
Некоторые из смоделированных мной вещей следующие:
class Robot {
// get current location
// place it at given location
}
class Grid {
// Grid is a collection of blocks
Block[][] blocks;
}
class Block {
// each block has it's coordinates,
// has paint status (painted or unpainted),
// and accepts a visitor to determine price to paint
}
class SquareBlock extends Block {
}
class RectangularBlock extends Block {
}
Для выдачи команд я смоделировал их как Command design pattern
.
Вопрос :
Я запутался в том, в каком классе должны храниться блоки visited
(он же нарисован) (для обработки № 4 и № 5 выше))?
Должен ли я хранить их в Robot
?(Я не думал, что он принадлежал в Robot
, потому что это было похоже на тесную связь между понятиями Robot
и paintable block
.)
Я не хотел хранитьэто также в Grid
, потому что, опять же, я не думаю, что Grid
нужно знать, какие действия над ним предпринимаются (хотя и не слишком уверен в этом).
Я мог бы хранить в другом классе (скажем, Foo
), но потом я подумал, что, возможно, пользователь может выполнить команду типа where ever Robot is, paint next 2 blocks
.В этом случае, поскольку это будет выполнено в PaintCommand
(обрабатывается CommandPattern), Foo
не будет знать, какие блоки были нарисованы.
Пожалуйста, дайте мне знать ваши мысли.