Data Binder

1. 目的

从Presenter 中分离出数据加载和响应Domain 层异步事件的逻辑,使Presenter 的逻辑处理更加简单。关于Presneter 的介绍可以参见Martin Fowler 的MVP 模式(最近好像已经分解成Supervising ControllerPassive View 两个模式,我还怎么看懂)。

2. 适用性

该模式主要适用于多客户端需要数据同步的系统中。

3. 结构

说明:

1) Model:该模型Swing 中的Model 类似,负责提供数据,一般在实现时,这个Model 应该是Domain 层的相关接口,如果用Java 的RMI 实现,它一般是一个远程接口。

2) View:就是一般View,负责展现数据和响应用户操作,和其它模式中的View 一样。

3) DataBinder:它是该模式的核心,负责从Model 中查询数据,将查询出的数据更新到View;并且负责监听Doamin 层中数据的变化,实时更新到View 中。

4) Rule:它封装了数据的规则。

5) DataChangedListener:它就不用介绍了,就是一般的监听器。

4. 协作

由Action 调用DataBinder 的bind 方法,产生下图的执行流程。

由Domain 层的异步事件驱动,产生下图的执行流程:

5. 实现

DataBinder 的代码:

 
  1. public class DataBinder implements DataChangedListener {
  2. private View view;
  3. private Rule rule;
  4. public DataBinder(View view) {
  5. this.view = view;
  6. }
  7. public void bind(Rule rule, Model model) {
  8. Object[] objects = model.getObjects(rule);
  9. view.setObjects(objects);
  10. this.rule = rule;
  11. model.addDataChangedListener(this);
  12. }
  13. public void detach(Model model) {
  14. model.removeDataChangedListener(this);
  15. }
  16. public void onObjectCreated(Object newObject) {
  17. if (rule.matches(newObject)) {
  18. // Notify view.
  19. }
  20. }
  21. public void onObjectModified(Object oldObject, Object newObject) {
  22. if (rule.matches(oldObject) && rule.matches(newObject)) {
  23. // Notify view.
  24. }
  25. }
  26. public void onObjectDeleted(Object object) {
  27. if (rule.matches(object)) {
  28. // Notify view.
  29. }
  30. }
  31. }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值