我们如何在Java中一起实现复合模式和访问者模式?

时间:2019-05-04 22:23:01

标签: java design-patterns composite visitor

我正在尝试在Java中组合这两种模式,但是我并没有弄清楚如何使它们都嵌套?

1 个答案:

答案 0 :(得分:0)

与访客一起使用复合设计模式是很常见的。以下是使用访问者和复合设计模式的应用程序示例的类图。 The class diagram image

该应用程序包含一个由两个具体形状(圆形和矩形)实现的Shape界面。 Composite类只能通过在复合对象上调用方法accept来对此类添加的所有形状调用方法accepte。

注意:复合对象也会自己调用visit方法。

复合类代码:

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());
}
}

输出: 打印矩形... 打印圈子...。 打印复合....

我希望这会有所帮助。

有关更多信息:这是链接Visitor design pattern