【发布时间】:2009-04-05 04:29:01
【问题描述】:
我最近开始创建一个图像编辑工具,可以满足非常特定的需求。对于将要使用它的人来说,这和我自己的娱乐一样多。但是,我很早就遇到了一些架构障碍。
与任何图像编辑器一样,用户将使用“工具”来绘制和操作图像。我的第一次尝试包括一个简单的界面:
public interface IDrawingTool
{
void DrawEffect( Graphics g );
// other stuff
}
这(我认为)会很干净,并且易于维护和扩展。只需添加接口对象并在运行时调用所选对象的 DrawEffect 方法。
这种方法的问题在于,不同的绘图工具不能清晰地遵循一个界面。例如,钢笔工具只需要知道要绘制的点就可以工作。然而,矩形需要单击的第一个点以及当前位置。多边形工具需要跟踪多次鼠标点击。
我很难想出一个很好的方法来实现它。我现在能想到的最好的方法是为每个工具添加一个 switch 语句和一个 case,这意味着绘图逻辑将在 Canvas 类中,而不是由 Tool 类型的对象封装。因为这是实践,我想以正确的方式做到这一点。感谢您提前提供任何帮助。
【问题讨论】:
标签: design-patterns oop interface-design