LegacyRendererAdapter.java
/**
* 适配器类,将LegacyRenderer接口适配到新的Renderer接口。
* 实现了适配器模式,使旧版渲染器可以在新系统中使用。
*
* <p>主要功能:
* <ul>
* <li>将drawCircle()适配到drawLegacyCircle()</li>
* <li>将drawRectangle()适配到drawLegacyRectangle()</li>
* <li>将drawTriangle()适配到drawLegacyTriangle()</li>
* <li>将drawEllipse()适配到drawLegacyEllipse()</li>
* </ul>
*
* <p>典型用法:
* <pre>{@code
* LegacyRenderer legacy = new LegacyRendererImpl();
* Renderer adapter = new LegacyRendererAdapter(legacy);
* adapter.drawCircle(100, 100, 50); // 通过适配器调用旧版渲染器
* }</pre>
*
* @author DeepSeek-Coder
* @version 1.0
* @see Renderer 新渲染器接口
* @see LegacyRenderer 旧版渲染器接口
* @since 2025-06-24
*/
package com.example.renderer.adapter;
import com.example.renderer.bridge.Renderer;
import com.example.renderer.legacy.LegacyRenderer;
import java.util.Objects;
import java.util.Objects;
/**
* 适配器类,将LegacyRenderer接口适配到新的Renderer接口。
* 实现了适配器模式,使旧版渲染器可以在新系统中使用。
*
* @see Renderer 新渲染器接口
* @see LegacyRenderer 旧版渲染器接口
*/
public class LegacyRendererAdapter implements Renderer {
@Override
public void setStyle(String stroke, String fill, int width) {
// 旧版渲染器不支持样式设置
}
@Override
public Object getContext() {
return null; // 旧版渲染器没有上下文
}
@Override
public void beginFrame() {
// 旧版渲染器不需要帧控制
}
@Override
public void endFrame() {
// 旧版渲染器不需要帧控制
}
private final LegacyRenderer legacyRenderer;
/**
* 创建LegacyRenderer适配器实例。
*
* <p>构造器会保存对LegacyRenderer实例的引用,所有渲染调用都将转发给它。
*
* @param legacyRenderer 要适配的旧版渲染器实例(非null)
* @throws NullPointerException 如果legacyRenderer为null
* @see LegacyRenderer
*/
/**
* 创建LegacyRenderer适配器实例。
*
* @param legacyRenderer 要适配的旧版渲染器实例(非null)
* @throws NullPointerException 如果legacyRenderer为null
* @author Aider+DeepSeek
* @since 2025-06-24
*/
public LegacyRendererAdapter(LegacyRenderer legacyRenderer) {
this.legacyRenderer = Objects.requireNonNull(legacyRenderer, "LegacyRenderer cannot be null");
}
/**
* 绘制圆形,转发调用到LegacyRenderer的drawLegacyCircle()方法。
*
* <p>实现细节:
* <ul>
* <li>参数直接转发,不做修改</li>
* <li>不处理LegacyRenderer抛出的异常</li>
* </ul>
*
* @param x 圆心x坐标
* @param y 圆心y坐标
* @param radius 圆形半径(必须>0)
* @see LegacyRenderer#drawLegacyCircle(int, int, int)
*/
/**
* 绘制圆形,转发调用到LegacyRenderer的drawLegacyCircle()方法。
*
* @param x 圆心x坐标
* @param y 圆心y坐标
* @param radius 圆形半径(必须>0)
* @throws IllegalArgumentException 如果半径不合法
* @author Aider+DeepSeek
* @since 2025-06-24
*/
@Override
public synchronized void drawCircle(int x, int y, int radius) {
if (radius <= 0) {
throw new IllegalArgumentException("半径必须为正数 (当前值: " + radius + ")");
}
try {
legacyRenderer.drawLegacyCircle(x, y, radius);
} catch (Exception e) {
throw new IllegalStateException("调用旧版渲染器失败", e);
}
}
/**
* 绘制矩形,转发调用到LegacyRenderer的drawLegacyRectangle()方法。
*
* <p>实现细节:
* <ul>
* <li>参数直接转发,不做修改</li>
* <li>不处理LegacyRenderer抛出的异常</li>
* </ul>
*
* @param x 左上角x坐标
* @param y 左上角y坐标
* @param width 矩形宽度(必须>0)
* @param height 矩形高度(必须>0)
* @see LegacyRenderer#drawLegacyRectangle(int, int, int, int)
*/
@Override
public void drawRectangle(int x, int y, int width, int height) {
legacyRenderer.drawLegacyRectangle(x, y, width, height);
}
/**
* 绘制三角形,转发调用到LegacyRenderer的drawLegacyTriangle()方法。
*
* <p>实现细节:
* <ul>
* <li>参数直接转发,不做修改</li>
* <li>不处理LegacyRenderer抛出的异常</li>
* </ul>
*
* @param x1 第一个顶点x坐标
* @param y1 第一个顶点y坐标
* @param x2 第二个顶点x坐标
* @param y2 第二个顶点y坐标
* @param x3 第三个顶点x坐标
* @param y3 第三个顶点y坐标
* @see LegacyRenderer#drawLegacyTriangle(int, int, int, int, int, int)
*/
@Override
public void drawTriangle(int x1, int y1, int x2, int y2, int x3, int y3) {
legacyRenderer.drawLegacyTriangle(x1, y1, x2, y2, x3, y3);
}
/**
* 绘制椭圆,转发调用到LegacyRenderer的drawLegacyEllipse()方法。
*
* <p>实现细节:
* <ul>
* <li>参数直接转发,不做修改</li>
* <li>不处理LegacyRenderer抛出的异常</li>
* </ul>
*
* @param x 椭圆中心x坐标
* @param y 椭圆中心y坐标
* @param rx 椭圆x轴半径(必须>0)
* @param ry 椭圆y轴半径(必须>0)
* @see LegacyRenderer#drawLegacyEllipse(int, int, int, int)
*/
@Override
public void drawEllipse(int x, int y, int rx, int ry) {
legacyRenderer.drawLegacyEllipse(x, y, rx, ry);
}
}