一、设计模式的简单介绍

MVP的 V 层是由UIViewController 和UIView 共同组成
view 将委托presenter 对它自己的操作,(简单来说就是presenter发命令来控制view的交互,要你隐藏就隐藏,叫你show 你就乖乖的show)
presenter拥有对 view交互的逻辑(就是上面说的意思)
presenter跟model层通信,并将数据转化成对适应UI的数据并更新view
presenter不需要依赖UIKit
view层是单一,因为它是被动接受命令,没有主动能力

二、设计模式中的通信方式

presenter 作为业务逻辑的处理者,首先要向Service层拿数据赋值给model,所以它将可以向model层通信。其次,UI的处理权移交给了它,所以它需要与view成通讯,发送命令更新UI。同时,UI的响应将触发业务逻辑的处理,所以view 层向presenter层通讯,告诉他用户做了什么操作,需要你反馈对应的数据来更新UI。这样就完成了从用户交互获得交互反馈到整个业务逻辑。
 
三、设计模式的实现
1.UserViewProtocol 协议定义了一下方法,这些方法其实就是presenter对view层发送的命令:
#import "UserModel.h"

@protocol UserViewProtocol <NSObject>

- (void)userViewDataSource:(NSArray<UserModel *> *)data;
- (void)showIndicator;
- (void)hideIndicator;
- (void)showEmptyView; @end

2.协议中的几个方法实现

- (void)userViewDataSource:(NSArray<UserModel *> *)data {

    self.friendlyUIData = data;

    [self.tableView reloadData];

}

- (void)showIndicator {

    [self.indicatorView startAnimating];

    self.indicatorView.hidden = NO;

}

- (void)hideIndicator {

    [self.indicatorView stopAnimating];

}

- (void)showEmptyView {

    UIAlertController *alertView = [UIAlertController alertControllerWithTitle:@"Alert"message:@"show empty view" preferredStyle:UIAlertControllerStyleAlert];

    [alertView addAction:[UIAlertAction actionWithTitle:@"确定"style:UIAlertActionStyleDefault handler:**nil**]];

    [self presentViewController:alertView animated:YES completion:^{

    }];

}

3.是presenter 可以直接拿到实现了UserViewProtocol 协议的对象,并且向他发送命令

@interface Presenter : NSObject

/**

 将一个实现了 UserViewProtocol 协议的对象绑定到 presenter上来

 @param view 实现了UserViewProtocol的对象,一般来说,应该就是控制器,在MVP中,V 和 VC 共同组成UI 层

 */

- (void)attachView:(id <UserViewProtocol>)view;

/**

 这个是对外的入口,通过这个入口,实现多个对内部的操作,外部只要调用这个接口就可以了

 */

- (void)fetchData;

@end

 

by:ml

  

mvp设计模式的更多相关文章

  1. 通过TodoList案例对比Vue.js的MVVM设计模式与JQuery的MVP设计模式

    Vue MVVM设计模式: 在使用vue进行编程时,不会再涉及到DOM的操作,取而代之的是修改数据层,当把数据进行变更的时候,vue之中它的底层会自动的根据数据的不同帮助我们去重新渲染页面. 编码时不 ...

  2. Android之MVP设计模式

    一.概述 MVP设计模式的前身是MVC,这个无需再议 在安卓工程中MVC对应关系如下: Layout->View : 对应布局文件Activity->Controller,View (其中 ...

  3. android开发系列之MVP设计模式

    最近在开发一个android的项目中,发现了一个很实用的设计模式(MVP).大家可能一看到这个名字就有点蒙,MVP到底是什么鬼呢?它的好用到底体现在哪呢?别着急,下面就让我们一一分享出来. 说到MVP ...

  4. Android学习探索之运用MVP设计模式实现项目解耦

    前言: 一直致力于提高开发效率降低项目耦合,今天想抽空学习一下MVP架构设计模式,学习一下如何运用到项目中. MVP架构设计模式 MVP模式是一种架构设计模式,也是一种经典的界面模式.MVP中的M代表 ...

  5. MVC和MVP设计模式

    参考博客http://www.cnblogs.com/end/archive/2011/06/02/2068512.html ####MVC模式M:model 模型V:view 视图C:control ...

  6. MVC,MVP设计模式

    什么是MVP MVP是模型(Model).视图(View).主持人(Presenter)的缩写,分别代表项目中3个不同的模块. 模型(Model):负责处理数据的加载或者存储,比如从网络或本地数据库获 ...

  7. 浅谈MVP设计模式

    最近公司在做一个医疗项目,使用WinForm界面作为客户端交互界面.在整个客户端解决方案中.使用了MVP模式实现.由于之前没有接触过该设计模式,所以在项目完成到某个阶段时,将使用MVP的体会写在博客里 ...

  8. android MVP设计模式!

    实现原理: MainActivity 用来更新UI,和显示业务逻辑的结果! LoginPresenterCompl 用来处理 业务逻辑 ILoginPresenter 业务处理类抽象出来的接口 ILo ...

  9. Android MVP 设计模式

    1.基本概念 Model    : 模型   负责处理数据的加载或者存储,比如从网络或本地数据库获取数据等: View     : 视图    负责界面数据的展示,与用户进行交互: Presenter ...

随机推荐

  1. 轻松掌握mongodb

    mongodb 是一种非关系型的,面向文档的数据库,也是nosql类的产品 memcache,redis等等 与mysql最大的区别:mongodb 使用javascript语言操作,保存是以json ...

  2. 四十五.加密与解密 AIDE入侵检测系统 扫描与抓包

    一.加密与解密 1.1 常见的加密算法 对称加密:怎么加密,就怎么解密 DES Date Encryption Standard AES Advance Encryption Standard 非对称 ...

  3. java类加载和对象初始化

    对象初始化过程:  1.首先,初始化父类中的静态成员变量和静态代码块,按照在程序中出现的顺序初始化:  2.然后,初始化子类中的静态成员变量和静态代码块,按照在程序中出现的顺序初始化:  3.其次,初 ...

  4. 百度UEditor编辑器从word粘贴公式

    官网地址http://ueditor.baidu.com Git 地址 https://github.com/fex-team/ueditor 参考博客地址 http://blog.ncmem.com ...

  5. DOM操作2

    一.API和WebAPI API就是接口,就是通道,负责一个程序和其他软件的沟通,本质是预先定义的函数. Web API是网络应用程序接口.包含了广泛的功能,网络应用通过API接口,可以实现存储服务. ...

  6. PowerShell中汉字与ASCII码相互转换

    function asc($param) { $rtn = '' $list = $param -split '' foreach ($char in $list) { if($char -ne '' ...

  7. pc电源cpu插座和显卡插座

    cpu插座是8口的,一般4+4 显卡插座是6口的,也有8口的用6+2 6+2的中2有一个小边,组合成8口也不能插入cpu插座.

  8. Git如何永久删除某个重要文件文件或文件夹 (包括历史记录) 强制

    有些时候不小心上传了一些敏感文件(例如密码), 或者不想上传的文件(没及时或忘了加到.gitignore里的), 而且上传的文件又特别大的时候, 这将导致别人clone你的代码或下载zip包的时候也必 ...

  9. idea使用maven私服

    nexus3中央仓库改为阿里云/ 参考:这里写链接内容  找到中央仓库 然后修改成:  http://maven.aliyun.com/nexus/content/groups/public/   1 ...

  10. C# 读取文件内容

    读取文件内容有三种方式 全部读取到字符串变量中 一次读取一行 全部读取到字符串数组中,每个数组元素存储一行文本 全部读取到字符串变量 string text = System.IO.File.Read ...