接口 Shape
public interface Shape
Shape接口定义了所有图形对象的基本行为。
作为图形系统的核心接口,它支持以下操作:
- 渲染 - 通过render(Renderer)方法
- 移动 - 通过move(int, int)方法
- 访问者模式 - 通过accept(ExportVisitor)方法
该接口遵循以下设计模式:
- 桥接模式 - 通过Renderer参数实现绘制逻辑的解耦
- 访问者模式 - 通过accept方法支持对图形的扩展操作
- 命令模式 - move方法支持图形位置的变更操作
典型实现示例:
public class Circle implements Shape {
public void render(Renderer r) {
r.drawCircle(x, y, radius);
}
// 其他方法实现...
}
-
方法概要
修饰符和类型方法说明voidaccept(ExportVisitor visitor) 接受访问者访问此图形对象,实现访问者模式。clone()创建并返回当前图形的一个深拷贝。voidmove(int dx, int dy) 移动图形的位置。void使用指定的渲染器绘制图形。default voidvalidatePosition(int x, int y) 验证坐标位置是否有效
-
方法详细资料
-
render
void render(Renderer renderer) throws NullPointerException, IllegalArgumentException, IllegalStateException 使用指定的渲染器绘制图形。具体绘制逻辑由实现类决定,渲染器参数提供实际的绘制能力。
实现类应确保:
- 参数renderer不为null
- 正确调用renderer的对应绘制方法
- 处理渲染器抛出的异常
- 参数:
renderer- 用于绘制图形的渲染器实现(非null)- 抛出:
NullPointerException- 如果渲染器参数为nullIllegalArgumentException- 如果当前图形的参数不合法(如负尺寸)IllegalStateException- 如果图形处于不可渲染的状态- 从以下版本开始:
- 2025-06-29
-
clone
创建并返回当前图形的一个深拷贝。此方法返回图形对象的精确副本,包括所有内部状态数据。对于包含引用类型字段的对象,需要递归实现深拷贝。
实现要求:
- 必须返回独立的新对象
- 修改副本不应影响原对象
- 字段值为引用类型时必须深拷贝
- 返回:
- 图形的新副本
- 抛出:
CloneNotSupportedException- 如果图形不支持克隆- 从以下版本开始:
- 2025-06-29
-
validatePosition
default void validatePosition(int x, int y) 验证坐标位置是否有效此方法用于检查图形坐标是否在合理范围内
- 参数:
x- x坐标(单位为像素)y- y坐标(单位为像素)- 抛出:
IllegalArgumentException- 当坐标为负数时抛出- 从以下版本开始:
- 2025-06-29
-
move
void move(int dx, int dy) 移动图形的位置。根据给定的偏移量调整图形的坐标位置,正数表示向右/下移动,负数表示向左/上移动。
- 参数:
dx- X轴方向的移动距离(像素)dy- Y轴方向的移动距离(像素)- 从以下版本开始:
- 2025-06-29
-
accept
接受访问者访问此图形对象,实现访问者模式。允许访问者对图形对象进行操作而不修改图形本身。
- 参数:
visitor- 用于处理图形的访问者对象(非null)- 抛出:
NullPointerException- 如果visitor为null- 从以下版本开始:
- 2025-06-29
-