通过Demo来阐述MVP的思路

文/大大大大峰哥


在自学Android开发的道路上也行走了一小段路咯,最近看到了MVP框架,每个人看完都会有不一样的看法,所以我也谈谈我对MVP的一些看法,同时
分享一下我是如何学习了解MVP的。



我们来了解MVP,我是通过一个登录的Demo来了解的。

我主要从流程中来带大家了解我们该如果使用MVP,不讲理论因为我也不知道
我主要从流程中来带大家了解我们该如果使用MVP,不讲理论因为我也不知道
我主要从流程中来带大家了解我们该如果使用MVP,不讲理论因为我也不知道

今天看了看书,书上讲述的是MVC设计模式,书中讲述了什么事M-V-C,我也和大家一起分享分享。

Model是存储应用的数据和业务逻辑。模型类通常用来映射与应用相关的一些事物,如用户、商店里的商品、服务器上的图片或者一段电视节目。模型对象不关心用户界面,它唯一的目的就是存储和管理应用数据。

View:视图对象知道如何在屏幕上绘制自己以及如何响应用户的输入,如用户的触摸。一个简单的经验法就是凡是能够在屏幕上看见的对象,就是试图对象。

Control: 控制对象含有应用的逻辑单元,是视图与模型对象的联系纽带。在Android的世界里面,控制器通常是Activity、Fragment或者Service的一个子类

在这里我们主要了解下M-V的意义。

1 流程

通过流程这样可能更好理解,而且通过我这个流程,自己动手走一遍玩一玩,这样我觉得效果更好。


1.1 大纲

  1. 首先完成User Been文件的创建,在这里面,我们只需要要User的serget方法。
  2. 接着思考User有什么业务,并将这些业务统统添加进入IUserBiz接口中。
  3. 每一个业务逻辑都有一个附带的Listener,这个Listener中有执行这个业务后会发生的事情。
  4. 然后UserBiz 将 IUserBiz中的功能实现。
  5. 对应的View(Activity)中的功能写一个 接口出来。
  6. 对应的View(Activity)实现接口。
  7. 实现Presenter,Presenter的作用就是将View与Model进行连接。

1.2 问题

主要是将我的思路是怎么走的与大家进行一个分享。

1.2.1 User Been的创建

仔细看我上面那个登录界面,然后回答:

  • 根据上面的图片如果是你创建一个User,里面有什么属性?
  • 然后你想象我们有登录与清除的功能,那你的User中需要有什么方法?

1.2.2 IUserBiz接口的创建

思考:我们已经有一个User Been了,我们需要用这个User进行什么操作?
并将User即将进行的操作写为抽象方法。

1.2.3 附带的Listener创建

思考:我们之前创建的IUserBiz接口中的方法有哪种情况会发生?
并将可能会出现的情况进行写入抽象Listener中去。

1.2.4 创建UserBiz直接实现IUserBiz

就是将方法实现。

1.2.5 将View(Activity)中的功能写入接口

仔细看我上面那个登录界面,然后回答:

  • Activity中有两个Button,点击一下会进行什么操作?
  • 操作过程中会发生什么情况,并将情况转换成对应的方法。

1.2.6 将View(Activity)连接创建好的接口并实现

根据接口并实现。

1.2.7 实现Presenter

在MVP中Presenter将Model与View进行一个连接,在这个地方的Presenter属于一个中间人的传话的效果。
那么在这个Presenter类中,主要就是图中Button的方法,也就是一个login方法,一个clear方法,具体实现还是将之前所实现的接口进行一个方法对接。
这个地方看不懂没有关系,第七步需要看代码了解同时了解什么是MVP


1.3 解答

这七个问题中,不一定要按我的回答来实现,大家可以用别的思路去想问题。

1.3.1 User Been的创建

仔细看我上面那个登录界面,然后回答:

  • 根据上面的图片如果是你创建一个User,里面有什么属性?
  • 然后你想象我们有登录与清除的功能,那你的User中需要有什么方法?
回答:
1.User有userName与password两个属性。
2.userName与password拥有setget方法即可。

1.3.2 IUserBiz接口的创建

思考:我们已经有一个User Been了,我们需要用这个User进行什么操作?
并将User即将进行的操作写为抽象方法。

回答:
User需要有一个login的功能,这个功能中我们需要将我们的账号密码传递进
去,同时还有一个Listener需要监听login的情况,在下面就是Listener的创
建了。

1.3.3 附带的Listener创建

思考:我们之前创建的IUserBiz接口中的方法有哪种情况会发生?
并将可能会出现的情况进行写入抽象Listener中去。

回答:
以前接口中主要实现了一个login的功能,这个功能会有两种可能发生,第一
种就是登录成功,第二种就是登录失败。

1.3.4 创建UserBiz直接实现IUserBiz

就是将方法实现。

这个就不解释了。

1.3.5 将View(Activity)中的功能写入接口

仔细看我上面那个登录界面,然后回答:

  • Activity中有两个Button,点击一下会进行什么操作?
  • 操作过程中会发生什么情况,并将情况转换成对应的方法。
回答:
1.点击login会有登录成功或者登录失败,在这里登录需要获取Edit的信息。
2.点击clear会清除EditView。
那么方法如下:
登录成功方法
登录失败方法
获取UserName
获取PassWord
清除Edit框

1.3.6 将View(Activity)连接创建好的接口并实现

根据接口并实现。

这个就不解释了。

1.3.7 实现Presenter

在MVP中Presenter将Model与View进行一个连接,在这个地方的Presenter属于一个中间人的传话的效果。
那么在这个Presenter类中,主要就是图中Button的方法,也就是一个login方法,一个clear方法,具体实现还是将之前所实现的接口进行一个方法对接。
这个地方看不懂没有关系,第七步需要看代码了解同时了解什么是MVP

//直接用代码解释了
package com.example.tangzhifeng.android_mvp_demo.presenter;

import android.os.Handler;

import com.example.tangzhifeng.android_mvp_demo.been.User;
import com.example.tangzhifeng.android_mvp_demo.biz.IUserBiz;
import com.example.tangzhifeng.android_mvp_demo.biz.OnLoginListener;
import com.example.tangzhifeng.android_mvp_demo.biz.UserBiz;
import com.example.tangzhifeng.android_mvp_demo.view.ILoginView;

*/**
 * Created by TangZhiFeng on 2016/10/29.
 * **这里主要充当一个中间人的作用,将**View**与**Model**之间进行操作。
 ***/

*public class UserLoginPresenter {
    //这个是Model的代表
    private IUserBiz userBiz;
    //这个是View的代表
    private ILoginView loginView;

    private Handler mHandle=new Handler();

    //传递一个loginView
    public UserLoginPresenter(ILoginView loginView) {
        this.loginView = loginView;
        //Model代表人员早在先前就已经准备好了
        userBiz=new UserBiz();
    }
    */**
     * **下面有两个方法主要是将两个**Button**的操作直接封装完成,然后直接使用
     *** */
    
    *//这个是login按钮
    public void login()
    {
        loginView.showLoading();

        userBiz.login(loginView.getUserName(), loginView.getPassWord(), new OnLoginListener() {
            @Override
            public void loginSuccess(final User user) {
                mHandle.post(new Runnable() {
                    @Override
                    public void run() {
                        loginView.toMainActivity(user);
                        loginView.hideLoading();
                    }
                });
            }
            @Override
            public void loginFaild() {
                mHandle.post(new Runnable() {
                    @Override
                    public void run() {
                        loginView.showFailedError();
                        loginView.hideLoading();
                    }
                });
            }
        });
    }
    //这个是clear按钮
    public void clear()
    {
        loginView.clearPassWord();
        loginView.clearUserName();
    }
}

2 作者有话说

我主要是通过这篇博文让我理解了MVP浅谈 MVP in Android,那我为什么还写呢,因为我想和大家分析下我是如何一步一步的实现的,对MVP原理有疑问的可以留言,我尽力而为,但是我也是小白,大家共同学习吧,在周六的日子码了这么多字也码了大几个小时,希望大家点个喜欢,你的喜欢可以让我知道没有白白码字。

3 干货

我的源码:GitHub

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,837评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,551评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,417评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,448评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,524评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,554评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,569评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,316评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,766评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,077评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,240评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,912评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,560评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,176评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,425评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,114评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,114评论 2 352

推荐阅读更多精彩内容