Ellipse.java
/**
* 椭圆图形实现类。
*
* <p>表示一个由中心坐标(x,y)和宽度(width)、高度(height)定义的椭圆。
* 实现了Shape接口,支持以下操作:
* <ul>
* <li>渲染 - 通过render()方法使用指定渲染器绘制</li>
* <li>移动 - 通过move()方法改变位置</li>
* <li>访问者模式 - 通过accept()方法支持扩展操作</li>
* </ul>
*
* <p>典型用法:
* <pre>{@code
* Ellipse ellipse = new Ellipse(100, 100, 80, 40);
* ellipse.render(renderer); // 绘制椭圆
* ellipse.move(10, 5); // 移动椭圆
* }</pre>
*
* @author DeepSeek-Coder
* @version 1.0
* @see Shape 图形接口
* @since 2025-06-24
*/
package com.example.renderer.factory;
import com.example.renderer.bridge.Renderer;
import com.example.renderer.visitor.ExportVisitor;
/**
* 椭圆图形实现类
*/
public class Ellipse implements Shape {
private int x, y, width, height;
/**
* 无参构造器,用于序列化和反射创建实例。
* 创建后需要通过setter方法设置属性。
*/
/**
* 无参构造器,用于序列化和反射创建实例。
*
* @author Aider+DeepSeek
* @since 2025-06-24
*/
public Ellipse() {}
/**
* 构造指定位置和大小的椭圆
* @param x 椭圆中心的X坐标
* @param y 椭圆中心的Y坐标
* @param width 椭圆的宽度
* @param height 椭圆的高度
*/
public Ellipse(int x, int y, int width, int height) {
this.x = x; this.y = y; this.width = width; this.height = height;
}
/**
* 使用指定渲染器绘制椭圆。
*
* <p>实现细节:
* <ul>
* <li>调用renderer.drawEllipse()方法进行实际绘制</li>
* <li>传递椭圆的中心坐标和尺寸参数</li>
* <li>不处理渲染器抛出的异常,由调用方处理</li>
* </ul>
*
* @param renderer 用于绘制椭圆的渲染器实现(非null)
* @throws NullPointerException 如果renderer参数为null
* @see Renderer#drawEllipse(int, int, int, int)
*/
@Override
public void render(Renderer renderer) {
renderer.drawEllipse(x, y, width, height);
}
/**
* 接受访问者访问此椭圆对象
* @param visitor 用于处理椭圆的访问者对象
* @throws NullPointerException 如果visitor参数为null
*/
@Override
public void accept(ExportVisitor visitor) {
visitor.visitEllipse(this);
}
/**
* 移动椭圆的位置。
*
* <p>实现细节:
* <ul>
* <li>直接修改椭圆的中心坐标</li>
* <li>不检查坐标溢出,由调用方确保参数合理</li>
* <li>支持负值移动(向左/上移动)</li>
* </ul>
*
* @param dx X轴方向的移动距离(像素)
* @param dy Y轴方向的移动距离(像素)
* @see Shape#move(int, int)
*/
@Override
public void move(int dx, int dy) {
x += dx;
y += dy;
}
/**
* 获取椭圆中心X坐标。
*
* <p>注意:返回的是椭圆的中心点X坐标,不是外接矩形的左上角X坐标。
*
* @return 椭圆中心的X坐标值
* @see #getY() 获取Y坐标
* @see #getWidth() 获取宽度
*/
/**
* 获取椭圆中心X坐标。
*
* @return 椭圆中心的X坐标值
* @author Aider+DeepSeek
* @since 2025-06-24
*/
public int getX() { return x; }
/**
* 获取椭圆中心Y坐标
* @return 椭圆中心的Y坐标值
*/
public int getY() { return y; }
/**
* 获取椭圆宽度
* @return 椭圆的宽度值
*/
public int getWidth() { return width; }
/**
* 获取椭圆高度。
*
* <p>高度是椭圆在Y轴方向的直径长度。
*
* @return 椭圆的高度值
* @see #getWidth() 获取宽度
* @see #getX() 获取X坐标
*/
public int getHeight() { return height; }
@Override
public Ellipse clone() {
try {
return (Ellipse) super.clone();
} catch (CloneNotSupportedException e) {
throw new AssertionError();
}
}
}