В принципе, все классы производятся от базового класса Element
, однако в любой данный момент структура может содержать любой производный элемент.Внедрить шаблон посетителя без указания всех производных типов в интерфейсе посетителя?
Посетитель должен напечатать элемент в нескольких разных стилях и реализовать интерфейс ElementVisitor
.
Возможно ли реализовать шаблон посетителя без указания всех производных типов в интерфейсе посетителя?
Если нет, то было бы альтернативы, учитывая, что Element
и ElementVisitor
являются компонентами уровня рамки, что мы должны быть в состоянии продлить в любое время но не редактировать в любое время.
Element
может в любое время accept
List<ElementVisitor>
так:
class Element
{
public void accept(List<ElementVisitor> actions) {
foreach(ElementVisitor action : actions)
{
action.visit(this);
}
}
}
Примечание: каркас еще в своей производственной фазе, поэтому дизайн может все еще быть изменен, если шаблон посетитель не допустит этого.
Есть instanceof
единственный способ обойти это? Каковы другие альтернативы, на которые я могу смотреть?
Что вы имеете в виду «напечатать элемент в нескольких разных стилях»? – stan0
В принципе, элементы имеют в нем данные, и каждый посетитель будет печатать только данные, относящиеся к нему. – Chad