Дизайн класса для отслеживания посещенных узлов - PullRequest
0 голосов
/ 10 февраля 2019

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

  1. Робот, который рисует блоки на квадратной сетке (сетка - это набор из n блоков).
  2. Допустим, в сетке есть 4 типа блоков, и каждый блок может стоить разную сумму для рисования.
  3. Пользователь введет команду, чтобы указать роботу, какой блок рисовать.
  4. Если блок уже нарисован, за перерисовку будет наложен штраф.
  5. Наконец, укажите общую стоимость (с разбивкой по типам блоков) и команды, выданные пользователем.

Некоторые из смоделированных мной вещей следующие:

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 не будет знать, какие блоки были нарисованы.

Пожалуйста, дайте мне знать ваши мысли.

...