Renderer.java

package com.example.renderer.bridge;

/**
 * 增强渲染器接口,扩展基础渲染能力。
 * 
 * <p>架构演进记录:
 * <ul>
 *   <li>v1.0 - 基础绘制方法</li>
 *   <li>v1.1 - 分离为RendererInterface和Renderer</li>
 *   <li>v1.2 - 增加样式设置和上下文访问</li>
 *   <li>v1.3 - 合并RendererInterface功能,包含基础绘制方法、样式管理、渲染上下文访问和帧控制</li>
 * </ul>
 * 
 * <p>架构角色:桥接模式中的抽象部分,将图形绘制与具体实现解耦。
 * 
 * <p>生命周期:
 * <ol>
 *   <li>通过RendererFactory创建实例</li>
 *   <li>配置样式(setStyle)</li>
 *   <li>执行绘制操作(drawXxx)</li>
 *   <li>可通过getContext获取底层实现对象</li>
 * </ol>
 * 
 * @author Aider+SillconFlow-Deepseek-R1
 * @since 2025-06-29
 * @see RendererFactory 创建实例的工厂类
 */
public interface Renderer {
    /**
     * 设置渲染样式
     * 
     * <p>此方法用于配置图形绘制时的线条、填充和线宽属性</p>
     * 
     * @param stroke 线条颜色(支持CSS颜色格式)
     * @param fill 填充颜色(支持CSS颜色格式)
     * @param width 线宽(像素,必须>=0)
     * @throws IllegalArgumentException 如果宽度为负数
     * @author Aider+SillconFlow-Deepseek-R1
     * @since 2025-06-29
     */
    void setStyle(String stroke, String fill, int width) throws IllegalArgumentException;
    
    /**
     * 获取当前渲染上下文
     * 
     * <p>此方法返回渲染器使用的底层实现对象</p>
     * 
     * @return 底层实现对象 (Swing返回Graphics2D,SVG返回StringBuilder等)
     * @author Aider+SillconFlow-Deepseek-R1
     * @since 2025-06-29
     */
    Object getContext();
    
    /**
     * 开始新帧/页的绘制
     * 
     * <p>此方法应在序列绘制的开始处调用,用于初始化帧状态</p>
     * 
     * @author Aider+SillconFlow-Deepseek-R1
     * @since 2025-06-29
     */
    default void beginFrame() {}
    
    /**
     * 结束当前帧/页的绘制
     * 
     * <p>此方法应在序列绘制的末尾调用,用于清理帧资源</p>
     * 
     * @author Aider+SillconFlow-Deepseek-R1
     * @since 2025-06-29
     */
    default void endFrame() {}
    /**
     * 绘制圆形
     * @param x 圆心x坐标
     * @param y 圆心y坐标 
     * @param radius 圆形半径(必须>0)
     * @throws IllegalArgumentException 如果半径不合法
     * @throws IllegalStateException 如果渲染器未正确初始化
     * 
     * @author Aider+SillconFlow-Deepseek-R1
     * @since 2025-06-29
     */
    void drawCircle(int x, int y, int radius) throws IllegalArgumentException, IllegalStateException;
    
    /**
     * 绘制矩形
     * @param x 左上角x坐标
     * @param y 左上角y坐标
     * @param width 矩形宽度(必须>0)
     * @param height 矩形高度(必须>0)
     * @throws IllegalArgumentException 如果宽度或高度不合法
     * 
     * @author Aider+SillconFlow-Deepseek-R1
     * @since 2025-06-29
     */
    void drawRectangle(int x, int y, int width, int height);
    
    /**
     * 绘制椭圆
     * @param x 椭圆外接矩形左上角x坐标
     * @param y 椭圆外接矩形左上角y坐标
     * @param width 椭圆宽度(必须>0)
     * @param height 椭圆高度(必须>0)
     * @throws IllegalArgumentException 如果宽度或高度不合法
     * 
     * @author Aider+SillconFlow-Deepseek-R1
     * @since 2025-06-29
     */
    void drawEllipse(int x, int y, int width, int height);
    
    /**
     * 绘制三角形
     * @param x1 第一个顶点x坐标
     * @param y1 第一个顶点y坐标
     * @param x2 第二个顶点x坐标
     * @param y2 第二个顶点y坐标
     * @param x3 第三个顶点x坐标
     * @param y3 第三个顶点y坐标
     * 
     * @author Aider+SillconFlow-Deepseek-R1
     * @since 2025-06-29
     */
    void drawTriangle(int x1, int y1, int x2, int y2, int x3, int y3);
}