下一行代码创建了一个Presenter的对象实例,通过它的构造函数传递了一个实现ICurrentTimeView接口的对象,这样,Presenter现在能够操作View,从类图中可以看出,Presenter...B) Presenter 添加到View 为了使事件能够从View(用户控件)传递到Presenter。...这不会造成Presenter和View之间的依赖,Presenter依赖于View的接口,View依赖于Presenter对事件的处理,让我们代码中看他们是如何工作的。...) { if (presenter == null) throw new ArgumentNullException("presenter may not be null"); this.presenter...= new $presenter$(view); view.AttachPresenter(presenter); presenter.InitView(); } private class
在第一种情况下,view和Presenter,以及presenter 和 mode都是互相需要知道的。...纯MVP和无controller架构(Pure Model-View-Presenter or Controlerless Architecture) 在我们的例子中,我们选择了一个叫做纯MVP的体系结构...多亏了Presenter 层,它的唯一功能是将单个视图与单个应用程序服务(也称为interactor,或用例)连接起来;因此,为了构建一个屏幕,我们可以使用N个演示者,每个视图服务对一个。...因此,我们可以将视图和服务理解为发出事件和接收信息的黑盒(通过输入和输出“电缆”),我们的Presenter 将负责将组件的输入电缆连接到另一个组件的输出电缆,反之亦然。
可以看到的是UI Logic处理的业务逻辑交给了Presenter,而UI彻底解放了,只单纯的做显示层(View)。...因为Presenter和Repository还是紧耦合着,这就好像负责Presenter的 A程序员必须要等负责Repository 的B程序员完成才能工作。 谁叫他们紧耦合在一起呢?...SharePoint Service Locator Design Pattern 仔细分析上图,Presenter还是没有解耦,因为这必须要在Presenter中把某个Repository的实例创建出来...,所以Presenter还是依赖了Repository这个项目程序集。...那么有没有一种方式能彻底将Presenter和Repository解耦呢?
public abstract class BasePresenter<T> { /** * 当内存不足释放内存 */ pr...
,直接在Activity或Fragment中处理逻辑,在Presenter中如果不需要处理数据,也可以不使用Model Presenter和Model都可以无限制的重用,所以MVP的划分不需要太细粒度,...稍微粗粒度一点,即不需要每个Activity或Fragment都给他划分一套MVP,可以几个Activity或Fragment使用同一个Presenter(使用同一个类不是同一个对象,这个Presenter...) TheMVP缺点 缺点就是不能重用Presenter,并且对于Presenter的实现有限制,必须是Activity或Fragment,如果要在其他地方实现Presenter,如Adapter,Dialog...就必须根据它的特性重新写对应的Presenter基类 因为Presenter基类继承了Activity或Fragment,如果我们需要通过继承使用其他Activity或Fragment,那就又需要修改Presenter...,这样导致存在大量代码寥寥无几的Presenter,你有想过将相近的逻辑都写到一个Presenter中,一直重用Presenter有多爽吗) 当Presenter中的方法需要Activity传递一些数据时
文章作者提出的观点和我在《谈谈关于MVP模式中V-P交互问题》中的观点是一致的,即Presenter对于View应该是相对透明的,View不能直接对Presenter进行操作,目的是实现Presenter...View和Presenter之间的关系,可以通过对Presenter的角色界定来体现,在整个MVP体系中Presenter扮演的是协调者的角色。...反映在真正View|Presenter的交互上面,就是说:View单纯地将用户的交互请求汇报给Presenter;Presenter接收到请求之后,整合相应的资源、执行相应的处理逻辑。...三、Presenter不关注具体的实现细节 谈到这里有人会说,所有的关于UI处理逻辑定义在Presenter中,那么会不会使Presenter变得臃肿不堪呢?...在上面一节中,我们说过UI交互逻辑的处理流程定义在Presenter中,但是具体的实现并不是完全在Presenter中。Presenter是蓝图的设计者,并不关注实现的细节。
MVP与MVC有着一个重大的区别:在MVP中View并不直接使用Model,它们之间的通信是通过Presenter (MVC中的Controller)来进行的,所有的交互都发生在Presenter内部。...Presenter的逻辑。...Model类有一个自动设置指向当前活动Presenter的指针。当Model中发生更改时,会将更改通知给当前活动的Presenter。...View还包含了一个可以指向关联的Presenter的指针。该指针由框架自动设置。使用此指针,你可以将UI事件传递给Presenter。...Presenter Presenter类(也是从TouchGFX Presenter类派生的用户定义类)负责当前活动Screen的业务逻辑。
交互器Interactor是一个在演示者presenter和数据之间进行中介的类。它从演示者presenter那里获得方向。...只有演示者presenter与视图对话,只有interactor与model (entity)对话。演示者presenter和交互者interactor相互协调。...: presenter) } } 这个类输出一个新的TripDetailView,该视图由一个interactor和presenter填充。...然后,presenter使用这些值向用户提供信息。...使用presenter向列表添加新路径点的add按钮。 一个列表List,它使用ForEach与presenter为每个路点创建一个单元格。
接口; 一个实现了View接口的Fragment; 一个实现了Presenter接口的presenter....而View层几乎没有任何逻辑操作,它只是将presenter 的命令转换为UI操作,并且监听用户的操作,然后传递给Presenter 。...); } BaseView中含方法setPresenter,该方法作用是在将presenter实例传入view中,其调用时机是presenter实现类的构造函数中。...New Presenter的操作是在每一个Activity的onCreate()里做的: 先添加了Fragment(View), 然后把它作为参数传给了Presenter....真正实现是在Presenter层。
View直接依赖Presenter,但是Presenter间接依赖View,它直接依赖的是View实现的接口。...答案是Presenter。...注意上面的图中View到Presenter的箭头表明View是可以任意的调用Presenter的。...那么,如果在不能获得Presenter的情况下,使View能够正常将请求递交给Presenter呢?...很简单,通过事件订阅机制就可以了,虽然View不可以获取到Presenter,但是Presenter却可以获取到View,让Presenter订阅View的相关事件就可以的。
} for all items. */ public ArrayObjectAdapter(Presenter presenter) { super(presenter..., "getItemViewType added presenter " + presenter + " type " + type); // 回调通知外部当前添加了 presenter...> cls, Presenter presenter) { mPresenterCache.put(cls, presenter); if (!...(cls); if (presenter !...,前面也说了 viewType 已经通过缓存池中的索引关联了 presenter Presenter presenter = mPresenters.get(viewType);
什么是MVP Model–View–Presenter (MVP) 源于 Model–View–Controller (MVC) 的结构设计模式,它是用于展示层(Presentation)的结构。...MVP 中的 Presenter 是 “中间人”角色,它的功能是在 Model–View–Presenter 三者中起到连接和协作的作用。程序中的大部分的逻辑都应该在 Presenter 中实现。...View 定义了展示数据的接口,以及转发用户的指令 Presenter 是连接 Model 与 View 的桥梁,是它们的协作者。 接下来我们就开始搭建通用的 MVP 结构了。...先定义 IPresenter, 接口很简单,是 Presenter 创建和注销的过程。...这样对于后续维护工作是一件非常令人头痛的事情,所以使用 Contract 来规范 View 和 Presenter 文件。
Presenter:presenter是model和view的中间人。你的所有业务逻辑都应该放在这里面。presenter负责查询model和更新view,对更新模型的用户交互作出反应。...使presenter与框架无关 为了提高代码的可测试性,那么就要确保presenter不能依赖Android类文件。...我个人还是喜欢写这么一个Presenter接口的,下面是两个简单的理由: 我不是去为presenter写一个接口而是写一个Contract类来描述view和presenter之间的交互。...Presenter和view有1对1的关系 如果没有view的话presenter就没有意义了。presenter随着view一起被创建也随着view一起被销毁。...一个presenter管理一个view。 你可以通过多种方式处理presenter中view的依赖。
void setPresenter(T presenter); } setPresenter的调用时机是presenter实现类的构造函数中,这样View中的事件请求通过调用presenter来实现...Presenter 接口则定义了该界面(功能)中所有的用户操作事件,TaskDetailPresenter 作为Presenter层,实现了该接口,TaskDetailPresenter 则只关注业务层的逻辑相关...6、View层 它负责创建view视图与presenter实例,并将二者关联起来。然后presenter的方法对数据进行请求与返回。...而presenter持有了Activity(或Fragment)的强引用,如果在请求结束之前Activity(或Fragment)被销毁了,那么由于网络请求还没有返回,导致presenter一直持有它们对象...总结 Fragment作为View,View和Presenter通过Activity来进行关联,Presenter对数据的调用是通过TasksRepository来完成的,而TasksRepository
Presenter部分。...因为Presenter的存在,View和Model就可以很轻松,顶多Presenter累一点。 还有一个特点是MVP模式很适合测试,单独测试VIEW成了一种可能。...的通信 View—–>Presenter 从视图界面出发,用户要请求数据,而Presenter是具体实现者,所以Presenter要提供方法代View的实现者调用,并且View的实现中必须要有Presenter...(info); } Model—–>Presenter Model处理完数据后它也能对Presenter提供数据。...Presenter与Model,Presenter与View之间的通信,现在就可以编写代码将它们粘合起来。
View不直接与Model交互,而是通过与Presenter交互来与Model间接交互。 Presenter与View的交互是通过接口来进行的。...通常View与Presenter是一对一的,但复杂的View可能绑定多个Presenter来处理逻辑。...进一步的解释: 在MVP里,Presenter完全把Model和View进行了分离,主要的程序逻辑在Presenter里实现。...而且,Presenter与具体的View是没有直接关联的,而是通过定义好的接口进行交互,从而使得在变更View时候可以保持Presenter的不变,即重用!...而同时,因为Adapter实现了View的接口,从而可以保证与Presenter之间接口的不变。这样就可以保证View和Presenter之间接口的简洁,又不失去UI的灵活性。
MVP是MVC的一种变体,View和Mode分别关注于UI的呈现和业务模型,View和Mode完全分离,View通过Presenter实现对业务模型的访问,Presenter“间接”地调用View实现对...View具有一个Presenter的引用,当View需要调用Mode的时候(比如需要访问Mode传入查询条件获取数据),通过Presenter访问Mode。...对于Presenter来说,它需要对View进行操作(比如数据成功获取后,将其显示到View中),但是Presenter并不会“直接”对View本身进行引用,而是引用View的接口(IView),所以View...Presenter属性进行初始化, 并将View对象设置为View本身。...是应用到Presenter上面的。
: presenter) } } } 6....: presenter) } } 7....List { ForEach(presenter.waypoints, content: presenter.cell) .onMove(perform: presenter.didMoveWaypoint...: presenter) } } 13....: WaypointViewPresenter init(presenter: WaypointViewPresenter) { self.presenter = presenter
通过调用 Presenter 的接口,实现回调响应,更新数据。...Presenter 主要作为一个桥梁,Model 去访问一个网站数据,解析回来,通过View 接口提供给界面显示 Model 主要数据结构,作为实现逻辑业务的核心 具体关系图为: ?...这里我们看下点击fab按钮的一个操作时序图,会直观的看到这个View和Presenter的传递过程。 ?...看的仔细的伙伴,会发现这里都是V和P(View和Presenter)之间的事情,没有看到M(Model),为什么呢? 因为Model是属于跟Presenter关联的,跟View是不直接联系的。...Presenter请求数据的时候,具体的实现过程会后推给Model来处理,Model处理数据,返回给Presenter,Presenter整理下,然后传给View,完成一个流程。
2.所有的事件处理的代码都在Activity中,造成了Activity既像View又像Controller这可能 所以出现了MVP,这个P,即Presenter,他将Actvity视为View层,Presenter...这种模式减少了Activity的职责,简化了Activity中的代码,将复杂的逻辑代码提取到了Presenter中进行处理。...MVP模式的核心思想: MVP把Activity中的UI逻辑抽象成View接口,把业务逻辑抽象成Presenter接口,Model类还是原来的Model。...这就是MVP模式,现在这样的话,Activity的工作的简单了,只用来响应生命周期,其他工作都丢到Presenter中去完成。...的主要特点就是把Activity里的许多逻辑都抽离到View和Presenter接口中去,并由具体的实现类来完成。
领取专属 10元无门槛券
手把手带您无忧上云