我最近开始创建一个图像编辑工具,它将满足非常特定的需求。这不仅是为了那些将要使用它的人,也是为了我的娱乐。然而,我在早期就遇到了一些架构上的问题。
像任何图像编辑器一样,用户将使用“工具”来绘制和操作图像。我的第一次尝试包括一个简单的界面:
public interface IDrawingTool
{
void DrawEffect( Graphics g );
// other stuff
}
我曾认为这种方法会更加简单明了,便于维护和扩展。只需添加接口对象并在运行时调用所选对象的DrawEffect方法即可。
但是,这种方法存在问题,不同的绘图工具并没有严格遵循单一接口。例如,钢笔工具只需要知道要绘制的点即可正常工作。然而,矩形需要记录第一个点击的点以及当前位置。多边形工具需要跟踪多个鼠标点击。
我正在思考如何实现这个功能。目前我能想到的最好的方法是使用switch语句,并为每个工具添加一个case语句,这意味着绘图逻辑将在Canvas类中,而不是由Tool类型对象封装。
因为这是一次实践,所以我希望能够用正确的方式来完成。感谢您提前提供的任何帮助。