MVP大家应该差不多都知道了,他其实是MVC的升华版,差不多是在view和model中加了一个调节器,这样view不能直接调用model中得数据,而是通过presenter来进行操作,此外Presenter与View和model的交互使用接口定义操作可以进一步达到松耦合也可以通过接口更加方便的进行测试。可以看一下流程图

算了不想写了,直接上代码吧,实在是懒得写了,这也没有保存功能,服死了。

首先定义View :

[代码]java代码:

1
2
3
4
5
public interface MainView<t> {
    void initView();
    void showData(T t);
 
}</t>

[代码]java代码:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public class MainActivity extends AppCompatActivity implements MainView<model>{
    private MainPresenter mainPresenter;
    private TextView textview;
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_mains);
        initView();
    }
 
    @Override
    public void initView() {
        textview = (TextView) findViewById(R.id.textview);
        mainPresenter = new MainPresenter(this);
        mainPresenter.loadData();
    }
 
    @Override
    public void showData(Model model) {
        textview.setText(model.getName());
    }
 
}</model>

然后定义presenter:

[代码]java代码:

1
2
3
4
5
public interface Presenter<t> {
    void loadData();
    void loadDataSuccess(T t);
    void loadFail();
}</t>

[代码]java代码:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
public class MainPresenter implements Presenter<model>{
    private MainView mainView;
    private MainModel mainModel;
 
    public MainPresenter(MainView mainView) {
        this.mainView = mainView;
        mainModel = new MainModel(this);
    }
 
    @Override
    public void loadData() {
        mainModel.getData();
    }
 
    @Override
    public void loadDataSuccess(Model model) {
        mainView.showData(model);
    }
 
    @Override
    public void loadFail() {
 
    }
}</model>

最后是model的定义:

[代码]java代码:

01
02
03
04
05
06
07
08
09
10
11
public class Model {
    String name;
 
    public String getName() {
        return name;
    }
 
    public void setName(String name) {
        this.name = name;
    }
}

[代码]java代码:

01
02
03
04
05
06
07
08
09
10
11
12
public class MainModel {
    MainPresenter mainPresenter;
 
    public MainModel(MainPresenter mainPresenter) {
        this.mainPresenter = mainPresenter;
    }
    //从服务器中获取数据
    public void getData(){
        //这个方法主要是获取数据如果成功则调用MainPresenter的loadDataSuccess 方法
        //如果失败就调用MainPresenter的loadFail()方法
    }
}

从代码中可以看出model和view不会直接联系,都是通过presenter。各个分层更加明细。

刚刚发表了一篇,结果没有保存到,只能重新写了,麻烦可不可以做成没有提交上,就给用户保存的功能啊。

MVP的理解和使用的更多相关文章

  1. [原创]浅谈在创业公司对MVP的理解

    [原创]浅谈在创业公司对MVP的理解 目前自已所处的公司类似一个创业平台,我们内部会不断的去孵化不同方向的产品,产品经理经常谈到的一个词就是MVP,所以有必需要去了解下什么是MVP? 1 什么是MVP ...

  2. android开发-mvp模式理解

    看之前,先忘掉所有,一步步看就行了. 最后会有一个原型demo,当然是转的了.看完文章,再看demo,然后再回头看文章就很好理解了,最好自己写一遍. 1.mvp开发模式可以理解为页面接口编程,每一层的 ...

  3. MVP 个人理解2

    根据我的理解,画了个图 这次又看了下 较复杂点的例子. 往往一个项目有多个部份,我们可以按功能分成几个activity, 每个activity有自己的view和数据model,因此也有自己的逻辑 pr ...

  4. MVP -----个人理解与示例(android例子 实现)

    MVP 也就是Model View Presenter模式,是建立一个工程的一种模式. ======================================================== ...

  5. 关于MVC与MVP的理解

    1. MVC的理解误区 理解误区: 1. 认为Model是指失血模型的实体类(Entity),是作为View和Controller之间的传输数据. 2. 把业务逻辑全部放在Controller端,认为 ...

  6. 一张图看Google MVP设计架构

    这段时间看了一下Google官方推出的MVP架构案例,决定把对MVP的理解用类图的形式表述一下.MVP架构的设计思想确实非常值得学习,大家如果还不是很了解MVP,建议抽时间去研究研究,相信对大家的架构 ...

  7. Android MVP模式的初识

      MVP是什么?或许在之前更多的人知道的是MVC这个模式(Model View Controller),然而MVP与MVC最不同的一点是M与V是不直接 关联的也是就Model与View不存在直接关系 ...

  8. 【转】MVP和MVC的区别

    转自:http://www.cnblogs.com/end/archive/2011/06/02/2068512.html MVC和MVP到底有什么区别呢? 从这幅图可以看到,我们可以看到在MVC里, ...

  9. 结合实例分析Android MVP的实现

    最近阅读项目的源码,发现项目中有MVP的痕迹,但是自己却不能很好地理解相关的代码实现逻辑.主要原因是自己对于MVP的理解过于概念话,还没有真正操作过.本文打算分析一个MVP的简单实例,帮助自己更好的理 ...

随机推荐

  1. 二叉排序树:HUD3999-The order of a Tree(二叉排序树字典序输出)

    The order of a Tree Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...

  2. ACM-ICPC 2018 徐州赛区网络预赛 B. BE, GE or NE

    In a world where ordinary people cannot reach, a boy named "Koutarou" and a girl named &qu ...

  3. [转] 重定向 CORS 跨域请求

    非简单请求不可重定向,包括第一个preflight请求和第二个真正的请求都不行. 简单请求可以重定向任意多次,但如需兼容多数浏览器,只可进行一次重定向. 中间服务器应当同样配置相关 CORS 响应头. ...

  4. Python的内存管理、命名规则、3个特性讲解

    理解变量: 变:现实世界中的状态是会发生改变的 量:衡量/记录现实世界中的状态,让计算机能够像人一样去识别世间万物(例如:一个人的身高.体重等这些信息) 为什么要变量: 程序执行的本质就是一系列状态的 ...

  5. [整理]linux中颜色的含义

    蓝色(Blue): Directory  目录 绿色(Green): Executable or recognized data file  可执行文件,可执行的程序 天蓝(Sky Blue): Sy ...

  6. 部署文件到IIS

    1.更改文件夹的权限 添加IIS_IUSR 右键属性-编辑-添加-高级-立即查找-添加IIS_IUSR .Everyone用户-勾选完全控制2.添加网站UI层-更改版本4.0-托管管道模式-经典3.网 ...

  7. HDU1877 又一版 A+B

    Problem Description 输入两个不超过整型定义的非负10进制整数A和B(<=231-1),输出A+B的m (1 < m <10)进制数.   Input 输入格式:测 ...

  8. Spring和redis简单测试demo

    1.1 首先创建一个Maven工程 File --> New --> Other,然后选择Maven目录下的Maven Project,如下图: 然后在弹出的面板中选择配置后,下一步即可, ...

  9. Java24种设计模式的优点、缺点和适用环境总结

    一.7个常用的面向对象设计原则 1.单一职责原则: 它是实现高内聚.低耦合的指导方针:一个对象应该只包含单一的职责,并且该职责被完整的封装在一个类中: 2.开闭原则: 指软件实体应尽量在不改变原有的代 ...

  10. 巧克力(zoj 1363)

    2100年,ACM牌巧克力将风靡全球. “绿的,橘红的,棕色的,红的…”,彩色的糖衣可能是ACM巧克力最吸引人的地方.你一共见过多少种颜色?现在,据说ACM公司从一个24种颜色的调色板中选择颜色来装饰 ...