设计通用工具管理器

时间:2011-08-14 14:56:56

标签: flex actionscript-3 model-view-controller design-patterns flex4

我想在UI组件上处理多个操作(按钮,文本字段,swfs,自定义对象等)

在缩放,倾斜,颜色,旋转等方面也可以保存它们。之前的行动已经完成

使用单个工具和单个mxml文件,但现在该工具被分成不同的工具。

想知道我如何设计/使用类似Toolmanager类的东西来处理动作等?

另外棘手的部分是某些对象可以为它们定义更多操作。 就像'object1'有3个可以对它执行的操作而'object2'有5个操作定义在它上面。

我们正在使用MVC设计模式,但没有这样的框架。

可以使用哪些不同的设计模式来执行此操作?

修改
更确切地说,我希望以AS3 OO的方式实现这一点。 该应用程序类似于绘图应用程序,它支持添加各种图像,文本,音频,swfs等。一个添加的用户可以执行对象的各种操作。 添加颜色,缩放倾斜,旋转等等和自定义效果,然后将绘图导出为PNG.Likewise一些适用于文本的效果不适用于图像 反之亦然。并且一些影响可能是常见的。

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

可能你可以拥有一个工具栏,工具(继承自公共基础)和某种属性面板,这些对象可以从一个管理器类访问,它将它们包装在一起并使一些变量可供所有类访问。 您可能希望在管理器类中使用选择数组或向量,并使用选择工具来操作此集合

喜欢(在经理中)

protected var _selection:Vector.<EditableBase> = new Vector.<EditableBase>();
public function get selection() { return _selection;}

以及有关editbase扩展程序及其可用工具的集合。 每次选择工具更新选择集合(可能从选择工具的onMouseUp方法调用管理器上的方法)时,您可以更新工具栏以显示当前选择的适当工具

(经理)

protected var _ToolsByType:Object (or Dictionary) = {"EditableAudio": ["toolA", "toolB", etc]};
protected var _defaultSet:Array = ["toolA", "toolB"];

并且在选择之后进行了操作(在经理中)

public function onSelectionChangedCallback():void
{
  var toolsToDisplay:Array = _defaultSet;
  if(_selection.length == 1)
  {
   //not actual syntax
   var type:String = getQualifiedClassName(_selection[0]);
   if(type in _ToolsByType) toolsToDisplay = _ToolsByType[type];
  }

  myToolBar.showSet(toolsToDisplay);
}

工具的祖先应该是这样的:

public class ToolBase
{
  protected var _manager:ToolManager;
  function ToolBase(manager:ToolManager)//and probably a bunch of other params as well
  {
     _manager = manager;
  }
  function onSelect()
  {
    //you can manipulate the properties panel here
  }
  function onDeSelect()...
  function onMouseDown(mouseData:event/whateverWrapperYouHaveCreated)...
  function onMouseMove...
  function onMouseUp...
}

等等:) 有点直接。 检查photoshop插件教程,或谷歌围绕“扩展{任何adobe东西在这里,像闪存或东西} 这是javascript但这个概念也可以在这里应用

答案 1 :(得分:0)

也许您可以通过在MVC实现中创建一些额外的类来使用策略设计模式

http://en.wikipedia.org/wiki/Strategy_pattern

算法,检查此工具的图像: http://www.senocular.com/demo/TransformToolAS3/TransformTool.html

再见! :)