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" + // 圆心X坐标(像素)
" <y>%d</y>\n" + // 圆心Y坐标(像素)
" <radius>%d</radius>\n" + // 圆半径(像素)
" <area>%.2f</area>\n" + // 圆面积(平方像素)
"</circle>\n",
c.getX(), c.getY(), c.getR(), Math.PI * c.getR() * c.getR());
}
/**
* 将矩形对象转换为XML格式输出
*
* <p>输出格式: <rectangle x="x" y="y" width="width" height="height"/></p>
*
* @param r 要导出的矩形对象(不能为null)
* @throws NullPointerException 如果矩形对象为null
* @throws IllegalArgumentException 如果矩形宽度或高度为负数
*/
@Override
public void visitRectangle(Rectangle r) {
if (r.getWidth() < 0 || r.getHeight() < 0) {
throw new IllegalArgumentException("矩形的宽度和高度不能为负数");
}
System.out.printf(
"<rectangle x=\"%d\" y=\"%d\" width=\"%d\" height=\"%d\"/>\n",
r.getX(), r.getY(), r.getWidth(), r.getHeight());
}
/**
* 将椭圆对象转换为XML格式输出
*
* <p>输出格式: <ellipse cx="centerX" cy="centerY" rx="xRadius" ry="yRadius"/></p>
*
* @param e 要导出的椭圆对象(不能为null)
* @throws NullPointerException 如果椭圆对象为null
* @throws IllegalArgumentException 如果椭圆宽度或高度为负数
*/
@Override
public void visitEllipse(Ellipse e) {
if (e.getWidth() < 0 || e.getHeight() < 0) {
throw new IllegalArgumentException("椭圆的宽度和高度不能为负数");
}
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);
}
/**
* 将三角形对象转换为XML格式输出
*
* <p>输出格式: <polygon points="x1,y1 x2,y2 x3,y3"/></p>
*
* @param t 要导出的三角形对象(不能为null)
* @throws NullPointerException 如果三角形对象为null
*/
@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());
}
}