在Photoshop等工具中,您可以选择一些工具(例如钢笔,画笔等)。单击工具后,您可以使用该工具进行绘制,擦除等,具体取决于所选的工具。

我想知道如何在OO设计中实现最佳效果。我只能想到让GUIManager始终知道选择了哪个工具,然后当Canvas(绘图区域)检测到鼠标单击或鼠标拖动时,它会询问GUIManager选择了哪个工具并应用该工具的行为。

是否有人在班级详细信息中描述了一种可能的解决方案(如果没有时间,可以详细说明)。

有帮助吗?

解决方案

查看状态模式,这正是您的榜样。

然而,它实际上不是一个GUI问题,而是更多的是面向对象的方法来解决这个问题。 GUI并没有真正发挥作用。

其他提示

我不确定OO原则是否真正适用于此,除非所有图形元素都可能来自您选择的GUI中的公共基类。

需要屏幕菜单层次结构的应用程序的复杂程度à la photoshop可能会让构图与继承与功能风格与你想要的任何东西之间的差异相形见绌。

虽然,如果你有动力使用不同的风格两次编写程序,看到结果可能会很有趣。虽然我们认为OO风格在我们尚未完全量化的方式中很重要,但各种编程风格的排名是一个没有实际答案的开放式问题。

这样做的一个想法是拥有一个工具类。只是用C ++草拟它 - 就像伪代码一样:

class Tool
{
public:
    // Keep a pointer to the "document", i.e. some representation of the
    // image you are editing
    Tool(Document *pDoc);

    // Process mouse events -- this need to be overridden to execute
    // the appropriate behaviour depending on the concrete type of tool
    virtual void OnMouseEvent(const MouseEvent &e) = 0;

    // and so on
};

然后,您继承此抽象工具类,以提供应用程序所需的具体工具。选择某个工具后,您可以实例化相应的工具对象并将其记住。该窗口将鼠标事件转发到当前活动的工具对象,然后对所选的工具执行适当的操作。

这是Johannes所指的State模式的实现。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top