版本模式设计模式

时间:2011-07-04 19:11:32

标签: design-patterns programming-languages

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

2 个答案:

答案 0 :(得分:0)

我会尝试对你发布的例子给出我的解释(谢谢你)。如果我错过了什么,请告诉我。

我会建模abstract class Tool,它提供了所有工具必须遵守的通用协议。这是一个消息,用于模拟使用工具的行为,另一个用于模拟释放它的行为(就像当你使用铅笔时,你在一个表面上休息,使用它并再次提升它)。类似于RestOnRaiseUp

您需要使用该工具下的ElementBlock s或Link s),并指定一个类,让您知道该元素是什么在工具的指针下。它可能是Canvas类。

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

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

abstract class Tool {
    abstract void RestOn...
    abstract void RaiseUp...

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

然后在工具栏的按钮处理程序中,您将拥有类似

的内容
btnHandTool_click(...) {
    _canvas.SetActiveTool(Tool.HandTool());
}

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

每个工具相对于抽象类Tool是polimorphycally的事实将让您忘记编写特定代码来判断活动工具是HandTool还是EraseTool实例。 您可以查看canva的活动工具的策略(模式)。在内部,类无法判断正在使用的活动工具的实现。它只知道它可以响应的消息。

最后但非常重要的是,您可以在 Rebecca Wirfs-Brock exelent 一书中找到名为设计面向对象软件的专题章节使用一组工具构建绘图应用程序,显示可用于建模的不同技术。 我建议你抓住它看看,真的值得花时间。

答案 1 :(得分:0)

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