首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >编辑模式设计模式

编辑模式设计模式
EN

Stack Overflow用户
提问于 2011-07-05 03:11:32
回答 2查看 69关注 0票数 0

我想收到关于如何程序编辑模式的想法。我的意思是创建具有不同行为的应用程序的模式,这些行为由选定的模式定义,就像图像编辑器中的那些模式。让我们举例说明:我有一个应用程序,它允许我将块放在一起,并用箭头将它们链接在一起。所以我可以使用move blocks模式,delete blocks和/或箭头模式,我可以选择在块之间创建链接,或者编辑块。所以我的想法是,对于我想要的每种行为,我都会选择工具栏中的一个按钮。点击任何一个按钮,鼠标输入的行为都会根据我的需要来处理。

EN

回答 2

Stack Overflow用户

发布于 2011-07-05 06:58:24

我会试着为你发布的例子给出我的解释(谢谢)。如果我遗漏了什么让我知道。

我会建立一个abstract class Tool模型,它提供了所有工具都必须遵守的通用协议。这是一条消息,用于对使用工具的行为进行建模,另一条消息用于对释放工具的行为进行建模(就像使用铅笔时,您停留在曲面上,使用它并再次提起它)。就像RestOnRaiseUp一样。

您需要使用该工具下的Element( Blocks或Links),并指定一个类负责让您知道哪个元素位于工具的指针下。它可能是一个Canvas类。

然后,您可以实现特定的工具行为,从Tool (Hand ToolEraseTool等)创建继承树。

为了与工具栏的按钮集成,我将执行以下操作:在Tool类中定义一个静态方法/属性,该方法/属性提供每个工具的唯一实例(单例模式):

代码语言:javascript
复制
abstract class Tool {
    abstract void RestOn...
    abstract void RaiseUp...

    static Tool HandTool() { return _handTool; }
    static Tool EraseTool() { return _eraseTool; }
    ....
}

然后,在工具栏的按钮处理程序中,您将看到如下内容

代码语言:javascript
复制
btnHandTool_click(...) {
    _canvas.SetActiveTool(Tool.HandTool());
}

btnEraseTool_click(...) {
    _canvas.SetActiveTool(Tool.EraseTool());
}
...

每个工具都是相对于抽象类Tool的,这一事实会让您忘记编写特定的代码来判断活动工具是HandTool还是EraseTool实例。您可以将其视为canva的活动工具的策略(模式)的变化。在内部,类不能通过活动工具的实现来判断是否正在使用。它只知道它可以响应的消息。

最后,但也是非常重要的一点是,在Rebecca Wirfs-Brock的著作“Designing Object Oriented Software”中,有一章专门介绍如何使用一组工具来构建绘图应用程序,展示了可用于建模的不同技术。我建议你拿着它去看一看,这真的很值得。

票数 0
EN

Stack Overflow用户

发布于 2011-07-06 15:10:25

状态模式非常适合这类工作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6575270

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档