Очень часто используется шаблон составного дизайна с посетителем.Ниже приведена диаграмма классов примера приложения с использованием шаблонов посетителя и составного проекта. Изображение диаграммы классов
Приложение содержит интерфейс Shape, реализованный двумя конкретными формами (Circle и Rectangle).Класс Composite позволяет вызывать метод accept для всех фигур, добавленных в этот класс, только путем вызова метода accept для составного объекта.
Примечание. Составной объект также вызывает метод посещения для самого себя.
Код составного класса:
public class Composite implements Shape {
Shape[] shapes;
public Composite() {
shapes = new Shape[]{new Rectangle(), new Circle()};
}
@Override
public void accept(ShapeVisitor shapeVisitor) {
for (int i = 0; i < shapes.length; i++) {
shapes[i].accept(shapeVisitor);
}
shapeVisitor.visit(this);
}
}
Класс PrintShape (Реализация интерфейса ShapeVisitor)
public class PrintShape implements ShapeVisitor {
@Override
public void visit(Composite composite) {
System.out.println("Printing composite ....");
}
@Override
public void visit(Rectangle rectangle) {
System.out.println("Print rectangle ...");
}
@Override
public void visit(Circle circle) {
System.out.println("Print Circle ....");
}
}
Основной тестовый класс:
public class VisitorMain {
public static void main(String[] args) {
Composite composite = new Composite();
composite.accept(new PrintShape());
}
}
Вывод: Печать прямоугольника ... Печать круга .... Печать составного ....
Надеюсь, это поможет.
Для получения дополнительной информации: вот ссылка Дизайн посетителярисунок