(Этот вопрос больше для людей, которые имеют доступ к книге, иначе сложно представить ее в контексте)
Я читал книгу 'Шаблоны проектирования' от GoF, и есть предложение, которое меня немного смущает, под 'Шаблоны создания-> Прототип-> Пример кода' (стр. 124).
В нижней части страницы находится реализация для BombedWall
, которая, как я понимаю, является конкретным прототипом, поскольку он наследует от Wall
и переопределяет виртуальную функцию Clone()
. BombedWall
также определяет другой метод , HasBomb()
, неизвестный для любых клиентов, использующих обычный интерфейс Wall
.
Единственный способ хранения BombedWall
в MazePrototypeFactory
(клиент Prototype) - это Wall*
(возвращается из BombedWall::Clone
), и единственный способ впоследствии получить HasBomb()
, насколько Я понимаю, что нужно выполнить понижение этого Wall*
до BombedWall*
(динамического или статического, в зависимости от того, знаю ли я тип), а затем я могу получить доступ к методу HasBomb()
.
Все это казалось мне в порядке; но потом позже автор говорит (та же страница, последнее предложение, второй последний абзац):
"Клиенты никогда не должны понижать возвращаемое значение Clone
до
нужный тип "
Что? Тогда как мне добраться до HasBomb()
?
Должно быть, я что-то упустил ...