Android--谷歌MVP代码分析<简单源码>

原创 2016年06月01日 19:59:57

资料来源:https://github.com/konmik/konmik.github.io/wiki/Introduction-to-Model-View-Presenter-on-Android

MVP:
View 对应于Activity,负责View的绘制以及显示数据并对用户行为做出反应的层;
Model 数据访问层<数据库,远程服务器>,JavaBean;
Presenter 数据处理层,负责完成View于Model间的交互,完成数据以及业务逻辑的处理;

可以理解为:减少了Activity的职责,简化了Activity中的代码,将复杂的逻辑代码提取到了Presenter中进行处理。对应的好处:耦合度更低,更方便的进行测试

MVC:
这里写图片描述

MVP:
这里写图片描述

结合谷歌官方例子,简化一个MVP:

–1:先看两个Base

public interface BaseView<T> {
    void setPresenter(T presenter);
}

public interface BasePresenter {
    void start();
}

start()方法可以放初始化类的方法,或者,可以拿来进行类初始化后的事件处理,网络请求
–2:契约类:
—– View是UI操作
—–Presenter 是数据业务逻辑操作

public interface UserContract {
    interface View extends BaseView<Presenter> {
        UserModel getUser();
    }

    interface Presenter extends BasePresenter {
        void showUser();
    }
}

–3:Presenter:
——构造函数:
MainActivityPresenter的构造函数,参数为UserContract.View,并调用view.setPresenter();
MainActivityPresenter

public class MainActivityPresenter implements UserContract.Presenter {
    private Context context;
    private UserContract.View view;

    public MainActivityPresenter(Context context, UserContract.View view) {
        this.context = context;
        this.view = view;
        view.setPresenter(this);
    }

    @Override
    public void showUser() {
        getShowUser();
    }

    @Override
    public void start() {

    }


    private void getShowUser() {
        UserModel userModel = view.getUser();
        Toast.makeText(context, "user" + userModel.getName() + userModel.getPassword(), Toast.LENGTH_LONG).show();
    }
}

–4:Modle:
—-JavaBean<实体类>

public class UserModel {
    private String name;
    private String password;

    public UserModel(String name, String password) {
        this.name = name;
        this.password = password;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
}

–5:View:
——对应的Activity或者Fragment:
——new MainActivityPresenter();—-初始化对象
——presenter.start();—-调用初始化方法
——setPresenter();

public class MainActivity extends AppCompatActivity implements UserContract.View {
    private UserContract.Presenter presenter;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        new MainActivityPresenter(this,this);
        presenter.start();
        findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                presenter.showUser();
            }
        });
    }

    @Override
    public UserModel getUser() {
        UserModel userModel = new UserModel("erhu", "key");
        return userModel;
    }

    @Override
    public void setPresenter(UserContract.Presenter presenter) {
        this.presenter=presenter;
    }
}

注意:
在onCreate()中:

new MainActivityPresenter();

而并没有像写成<两者都可以>:

presenter=new MainActivityPresenter();

是因为在MainActivityPresenter的构造方法里面调用了view.setPresenter(),相当于间接初始化了相关数据。

版权声明:本文为博主原创文章,未经博主允许不得转载。

谷歌拼音输入法PinyinIME源码修改----随着Setting中中英文的切换对应改变软键盘中英文输入且字符变换

项目中使用的是Google的输入法:谷歌拼音输入法,即PinyinIME。 客户提出需求:需要在Setting中切换中英文的时候,输入法对应成中英文输入,并且字符也对应成中英文,即Setting中设...
  • hanhan1016
  • hanhan1016
  • 2015年12月05日 10:45
  • 3067

谷歌chrome浏览器的源码分析(一)

随着网络技术的发展,越来越多应用都已经离不开网络,特别像人类大脑一样的知识库的搜索引擎,更加是离不开功能强大的云计算。不过,即便云计算非常强大,但它还不能直接地把结果呈现给用户,这样就需要一个客户端来...
  • GarfieldEr007
  • GarfieldEr007
  • 2016年04月27日 12:36
  • 4020

Android MVP开发模式 google 官方Mvp架构详解

Google官方MVP Sample代码解读 关于Android程序的构架, 当前最流行的模式即为MVP模式, Google官方提供了Sample代码来展示这种模式的用法. Repo地址: andr...
  • jungle_pig
  • jungle_pig
  • 2017年03月24日 09:19
  • 5343

Jenkins+Gradle+findbugs对Android工程源码进行静态代码分析

环境说明 Gradle 2.6. OS:windows server 2008 Jenkins 1.620 Findbugs 3.0.1 一、Jenkins配置如下: 1、  新建job ...
  • hwhua1986
  • hwhua1986
  • 2015年10月20日 16:06
  • 4722

Jenkins+Gradle+checkstyle对Android工程源码进行静态代码分析

环境说明 Gradle 2.6. OS:windows server 2008 Jenkins 1.620 Findbugs 3.0.1 一、Jenkins配置如下: 1、  新建job...
  • hwhua1986
  • hwhua1986
  • 2015年10月20日 16:19
  • 3497

Jenkins+ Gradle +Lint对Android工程源码进行静态代码分析

Lint的介绍        官网介绍: The Android linttool is a static code analysis tool that checks your Android pr...
  • hwhua1986
  • hwhua1986
  • 2015年11月27日 10:31
  • 3342

Jenkins+Gradle+checkstyle对Android工程源码进行静态代码分析

Jenkins+Gradle+checkstyle对Android工程源码进行静态代码分 析 http://blog.csdn.net/it_talk/article/detail...
  • u011904605
  • u011904605
  • 2017年03月04日 18:07
  • 326

Jenkins+Gradle+findbugs对Android工程源码进行静态代码分析

http://blog.csdn.net/hwhua1986/article/details/49278467 http://blog.csdn.net/hwhua1986/arti...
  • u011904605
  • u011904605
  • 2017年01月23日 00:08
  • 603

Jenkins+Gradle+pmd对Android工程源码进行静态代码分析

一、Jenkins配置如下: 1、  新建job 2、  配置svn 3、  配置构建操作 备注: Tasks指的是build.gradle里面的task名称 配置info参数是用来看调试日志,...
  • hwhua1986
  • hwhua1986
  • 2015年10月20日 16:31
  • 1198

Jenkins+ Gradle +Lint对Android工程源码进行静态代码分析

http://blog.csdn.net/hwhua1986/article/details/50067089 http://blog.csdn.net/hwhua1986/article/de...
  • u011904605
  • u011904605
  • 2017年01月18日 22:34
  • 161
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android--谷歌MVP代码分析<简单源码>
举报原因:
原因补充:

(最多只允许输入30个字)