XMLExportVisitor.java
package com.example.renderer.visitor;
import com.example.renderer.factory.*;
/**
* XML导出访问者实现类
*/
public class XMLExportVisitor implements ExportVisitor {
@Override
public void visitCircle(Circle c) {
if (c.getR() <= 0) {
throw new IllegalArgumentException("圆的半径必须为正数");
}
System.out.printf(
"<circle>\n" +
" <x>%d</x>\n" +
" <y>%d</y>\n" +
" <radius>%d</radius>\n" +
" <area>%.2f</area>\n" +
"</circle>\n",
c.getX(), c.getY(), c.getR(), Math.PI * c.getR() * c.getR());
}
@Override
public void visitRectangle(Rectangle r) {
System.out.printf(
"<rectangle x=\"%d\" y=\"%d\" width=\"%d\" height=\"%d\"/>\n",
r.getX(), r.getY(), r.getWidth(), r.getHeight());
}
@Override
public void visitEllipse(Ellipse e) {
System.out.printf(
"<ellipse cx=\"%d\" cy=\"%d\" rx=\"%d\" ry=\"%d\"/>\n",
e.getX() + e.getWidth()/2,
e.getY() + e.getHeight()/2,
e.getWidth()/2,
e.getHeight()/2);
}
@Override
public void visitTriangle(Triangle t) {
System.out.printf(
"<polygon points=\"%d,%d %d,%d %d,%d\"/>\n",
t.getX1(), t.getY1(), t.getX2(), t.getY2(), t.getX3(), t.getY3());
}
}