Shape.java
package com.example.renderer.factory;
import com.example.renderer.bridge.Renderer;
import com.example.renderer.visitor.ExportVisitor;
import com.example.renderer.bridge.Renderer;
import com.example.renderer.visitor.ExportVisitor;
/**
* Shape接口定义了所有图形对象的基本行为。
* 作为图形系统的核心接口,它支持以下操作:
* <ul>
* <li>渲染 - 通过render(Renderer)方法</li>
* <li>移动 - 通过move(int, int)方法</li>
* <li>访问者模式 - 通过accept(ExportVisitor)方法</li>
* </ul>
* 所有具体图形类(如圆形、矩形等)都应实现此接口。
*
* <p>该接口遵循以下设计模式:
* <ul>
* <li>桥接模式 - 通过Renderer参数实现绘制逻辑的解耦</li>
* <li>访问者模式 - 通过accept方法支持对图形的扩展操作</li>
* <li>命令模式 - move方法支持图形位置的变更操作</li>
* </ul>
*
* <p>典型实现示例:
* <pre>{@code
* public class Circle implements Shape {
* public void render(Renderer r) {
* r.drawCircle(x, y, radius);
* }
* // 其他方法实现...
* }
* }</pre>
*
* @author DeepSeek-Coder
* @version 1.0
* @see Circle 圆形实现
* @see Rectangle 矩形实现
* @see Ellipse 椭圆实现
* @see Triangle 三角形实现
* @since 2025-06-24
*/
public interface Shape {
/**
* 使用指定的渲染器绘制图形。
* 具体绘制逻辑由实现类决定,渲染器参数提供实际的绘制能力。
*
* @param renderer 用于绘制图形的渲染器实现,不能为null
* @throws NullPointerException 如果renderer参数为null
*/
/**
* 使用指定的渲染器绘制图形。
*
* <p>实现类应确保:
* <ul>
* <li>参数renderer不为null</li>
* <li>正确调用renderer的对应绘制方法</li>
* <li>处理渲染器抛出的异常</li>
* </ul>
*
* @param renderer 用于绘制图形的渲染器实现
* @throws NullPointerException 如果renderer为null
*/
/**
* 使用指定的渲染器绘制图形。
*
* @param renderer 用于绘制图形的渲染器实现(非null)
* @throws NullPointerException 如果renderer参数为null
* @throws IllegalArgumentException 如果图形参数不合法
* @throws IllegalStateException 如果图形状态不适合渲染
* @author Aider+DeepSeek
* @since 2025-06-24
*/
void render(Renderer renderer) throws NullPointerException, IllegalArgumentException, IllegalStateException;
/**
* 创建并返回当前图形的一个副本
*/
/**
* 创建并返回当前图形的一个深拷贝
* @return 图形的新副本
* @throws CloneNotSupportedException 如果图形不支持克隆
*/
Shape clone() throws CloneNotSupportedException;
/**
* 验证坐标位置是否有效
* @param x x坐标
* @param y y坐标
* @throws IllegalArgumentException 如果坐标为负数
*/
default void validatePosition(int x, int y) {
if (x < 0 || y < 0) {
throw new IllegalArgumentException("坐标不能为负数");
}
}
/**
* 移动图形的位置。
* 根据给定的偏移量调整图形的坐标位置,正数表示向右/下移动,负数表示向左/上移动。
*
* @param dx X轴方向的移动距离(像素)
* @param dy Y轴方向的移动距离(像素)
*/
/**
* 移动图形的位置。
*
* @param dx X轴方向的移动距离(像素)
* @param dy Y轴方向的移动距离(像素)
* @author Aider+DeepSeek
* @since 2025-06-24
*/
void move(int dx, int dy);
/**
* 接受访问者访问,实现访问者模式。
* 允许外部访问者对图形对象进行操作,而不需要修改图形类本身。
*
* @param visitor 用于处理图形的访问者对象,不能为null
* @throws NullPointerException 如果visitor参数为null
*/
/**
* 接受访问者访问此图形对象。
*
* @param visitor 用于处理图形的访问者对象(非null)
* @throws NullPointerException 如果visitor参数为null
* @author Aider+DeepSeek
* @since 2025-06-24
*/
/**
* 接受访问者访问此图形对象。
*
* @param visitor 用于处理图形的访问者对象(非null)
* @throws NullPointerException 如果visitor参数为null
* @author Aider+DeepSeek
* @since 2025-06-24
*/
void accept(ExportVisitor visitor);
}