1. 目的
从Presenter 中分离出数据加载和响应Domain 层异步事件的逻辑,使Presenter 的逻辑处理更加简单。关于Presneter 的介绍可以参见Martin Fowler 的MVP 模式(最近好像已经分解成Supervising Controller和Passive 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 的代码:
- public class DataBinder implements DataChangedListener {
-
- private View view;
-
- private Rule rule;
-
- public DataBinder(View view) {
- this.view = view;
- }
-
- public void bind(Rule rule, Model model) {
- Object[] objects = model.getObjects(rule);
- view.setObjects(objects);
- this.rule = rule;
- model.addDataChangedListener(this);
- }
-
- public void detach(Model model) {
- model.removeDataChangedListener(this);
- }
-
- public void onObjectCreated(Object newObject) {
- if (rule.matches(newObject)) {
-
- }
- }
-
- public void onObjectModified(Object oldObject, Object newObject) {
- if (rule.matches(oldObject) && rule.matches(newObject)) {
-
- }
- }
-
- public void onObjectDeleted(Object object) {
- if (rule.matches(object)) {
-
- }
- }
- }
- 大小: 13.7 KB
- 大小: 9.4 KB
- 大小: 10.1 KB
分享到:
相关推荐
Liquid XML Data Binder现在支持为.Net Standard(1.6和2.0)生成C#和Visual Basic .Net源代码和项目文件。 10、XML Data Binder中的新 .Net Core支持 Liquid XML Data Binder现在支持为.Net Core(1.1和2.0)生成...
virtual android::status_t onTransact(int code, const android::Parcel& data, android::Parcel* reply, int flags) override; }; ``` 2. 实现服务端(Service):服务端需要在生命周期内将Binder对象绑定到服务...
**Android aidl Binder框架浅析** 在Android系统中,服务间的通信是通过Binder机制实现的,它是Android系统中进程间通信(IPC)的核心组件。Binder框架允许不同进程间的对象互相调用方法,使得数据和操作可以在不同...
- 生成Delphi源代码:使用Delphi的“XML Data Binder”工具,将XSD文件转换为Delphi的.pas源代码文件。这将生成一组类,它们直接映射到XSD中的元素和复杂类型。 - 使用生成的类:在代码中实例化这些类,然后可以通过...
除了直接使用C#的API,Unity还支持通过Unity Asset Store获取第三方插件,例如Excel Importer、Excel Data Binder等,它们提供更丰富的功能,比如直接在Unity中读取、写入Excel数据,无需每次都依赖外部软件。...
它的全名是Google Simple Data Binder,版本2.7是其稳定且广泛使用的版本。标题中的"gson2.7.jar"正是这个库的二进制文件,可以被Java项目引入作为依赖来实现JSON操作。 Gson库的核心功能在于它提供了便捷的方法将...
在这个例子中,`TestBinderServer.TestBinder`是服务器端 Binder 类的实例,客户端通过IBinder接口调用了`addData()`方法。值得注意的是,所有跨进程的数据交换都必须通过Parcelable接口,所以自定义的数据类型需要...
binder.transact(INTERFACE_TRANSACTION /*1000*/, data, null, 0); data.recycle(); } ``` 通过上述步骤,客户端成功调用了服务端的`start(String filePath)`方法,实现了进程间的数据传输与功能调用。 #### 四...
int (*transact)(struct binder_interface* interface, uint32_t code, const void* data, size_t size, void** reply, size_t* reply_size); } binder_interface; ``` 2. 实现Stub:接下来,服务端实现这个接口,...
在Android系统中,Binder是进程间通信(IPC,Inter-Process Communication)的主要机制,它使得应用程序和服务能够跨进程交换数据和执行操作。本教程将详细阐述如何使用C++实现一个基于Binder的服务(Service)和...
### Android平台——Binder机制 #### 一、Binder机制概述 Binder机制是Android系统中用于实现跨进程通信(IPC)的核心技术之一。通过Binder机制,不同的应用程序和服务能够在不同的进程中相互通信,共享数据或请求...
void sendData(int data); } ``` 这将生成两个Java类:`IMyService`接口和`IMyService.Stub`抽象类。`Stub`类是 Binder 对象的实现,包含了服务端调用的方法;而`IMyService`接口则是客户端调用的接口。 2. **...
- 隐式启动Service:通过Intent的Action、Category、Data等匹配Service,适用于跨应用通信。 8. **Binder性能优化** - 尽量减少Binder跨进程通信,避免大量数据传输,因为数据序列化和反序列化会影响性能。 - ...
3. **数据流(Data Flow)**:Binder提供了数据流动的机制,使得数据能够在组件之间自动传递,无需显式地管理数据传输过程。 4. **线程模型**:Binder处理多线程问题,确保在不同进程间的数据交换是线程安全的,...
Generic Data Binder (GDB) for jQuery 提供双向数据绑定,GDB 能实时进行双向绑定视图和模块。GDB 是非常容易使用,零配置(除非你想要)的模版引擎和框架的小插件。 在线演示 标签:Generic
例如,约定数据包`data`中的第一个数据为`filePath`,然后在`onTransact()`中读取并处理。同时,通过`code`变量来识别客户端期望调用的服务方法,这需要客户端和服务端之间有一组预定义的整数值来对应不同的服务函数...
public boolean onTransact(int code, android.os.Parcel data, android.os.Parcel reply, int flags) throws android.os.RemoteException { // ... 实现事务处理逻辑 } // ... 其他方法 } public static ...
### Android进程间通信——Binder机制 #### 一、简要介绍和学习计划 在Android操作系统中,每一个应用程序通常由多个组件如Activity和服务(Service)组成。这些组件可能运行在同一进程中,也可能分布在不同进程中。...