/** @page architecture 系统架构
本系统提供跨平台的2D图形渲染能力,支持多种渲染后端(Swing/SVG/Legacy),采用桥接模式将渲染接口与实现分离。
问题:渲染接口与实现需要解耦,支持多种渲染后端
方案:
public interface Renderer { /* 抽象接口 */ }
public class SwingRenderer implements Renderer { /* 具体实现 */ }
public class SVGRenderer implements Renderer { /* 具体实现 */ }
public class LegacyRendererAdapter implements Renderer { /* 适配器 */ }
优点:
问题:整合旧版渲染系统
方案:
public class LegacyRendererAdapter implements Renderer {
private LegacyRenderer legacyRenderer;
// 适配方法调用...
}
适配逻辑:
问题:图形对象创建需要统一管理和参数校验
方案:
public interface ShapeFactory {
createCircle(int x, int y, int radius);
Circle Rectangle createRectangle(int x, int y, int width, int height);
// 其他工厂方法...
}
实现特点:
优点:
问题:需要支持图形操作的撤销/重做功能
方案:
public interface Command {
void execute();
void undo();
void redo();
}
public class UndoManager {
private Stack<Command> undoStack;
private Stack<Command> redoStack;
}
典型实现类:
AddShapeCommand
: 添加图形命令DeleteShapeCommand
: 删除图形命令MoveShapeCommand
: 移动图形命令工作流程:
优点:
问题:需要通知图形状态变化
方案:
public interface ShapeObserver {
void onShapeChanged();
}
public class LoggingShapeObserver implements ShapeObserver {
// 记录带时间戳的日志
}
通知机制:
应用场景:
ExportVisitor
接口支持不同格式导出JSONExportVisitor
/XMLExportVisitor
具体实现public interface Renderer {
// 设置绘制样式
void setStyle(String stroke, String fill, int width);
// 获取渲染上下文
Object getContext();
// 帧控制
void beginFrame();
void endFrame();
// 图形绘制方法
void drawCircle(int x, int y, int radius);
void drawRectangle(int x, int y, int width, int height);
void drawEllipse(int x, int y, int width, int height);
void drawTriangle(int x1, int y1, int x2, int y2, int x3, int y3);
}
new SwingRenderer();
SwingRenderer renderer = setGraphics(graphics2D); // 必须设置绘图上下文
renderer.drawCircle(100, 100, 50); renderer.
new SVGRenderer();
SVGRenderer renderer = beginFrame();
renderer.drawCircle(100, 100, 50);
renderer.endFrame(); // 输出SVG到控制台 renderer.
<svg xmlns='http://www.w3.org/2000/svg'>
<circle cx='100' cy='100' r='50'/>
</svg>
new LegacyRendererImpl();
LegacyRenderer legacy = Renderer adapter = new LegacyRendererAdapter(legacy);
drawCircle(100, 100, 50); // 调用旧版实现 adapter.
Renderer realRenderer = new SwingRenderer();
Renderer proxy = new RemoteRendererProxy(realRenderer);
drawCircle(100, 100, 50); // 通过代理调用 proxy.
RendererFactory
获取渲染器实例ShapeFactory
创建图形对象Command
操作图形*/