2

假设您有一个用户界面小部件,并且在某些状态更改时,您需要设置执行一些操作。所以你做这样的事情:

widget.setSize(400, 300);
widget.setHeader("whatever");
widget.setData(new int[] {2, 3, 5});
widget.setFancyThingEnabled(true);

然后假设这些操作中的每一个都会触发小部件的整体刷新。那是低效的。

我知道解决这个问题的几种方法,但是正确/最好/最优雅的模式是什么?我知道我可以:

  • 创建一些Property对象,我可以填写然后将其提供给小部件。
  • 有一些setRefresh(enabled:boolean)方法来包装交易。
  • 只允许通过回调方法设置属性,然后将在事务中执行。
  • 将刷新放在队列中并等待一段时间,然后再继续。

我正在使用 GWT,它在任意慢速机器上的浏览器上运行,但这几乎适用于任何环境。

编辑: 请记住,UI 是一个示例,我指的是从一个状态到另一个状态的转换会在其他中间状态上触发太多不必要的计算的一般场景。

4

2 回答 2

2

这个策略模式怎么样:

widget
  .startAction() // instance of WidgetAction returned
  .setSize(400, 300)
  .setHeader("whatever")
  .setData(new int[] {2, 3, 5})
  .setFancyThingEnabled(true)
  .close(); // actual changes made for UI
于 2012-09-17T09:05:00.910 回答
0

不必要的,因为浏览器已经为您执行此操作。这是可能的,因为在整个当前 JavaScript 事件处理程序完成之前不必进行渲染。与一些桌面 GUI 框架相比,这实际上是 Web 开发的一大优势。

于 2012-09-17T09:37:45.767 回答