我正在尝试在Java中组合这两种模式,但是我并没有弄清楚如何使它们都嵌套?
答案 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