最近在阅读郭霖大神的公众号时,分类中架构引起了我的注意。

虽然是个人开发(水平很菜的那种),但最终都要向企业正式项目开发靠近。因此接下来一段时间,主要学习一下MVP架构、Retrofit以及RxJava

本篇文章来自study_zhxu,博客地址:http://blog.csdn.net/study_zhxu

本篇文章未完成,仅做学习记录

MVP把Activity中的UI逻辑抽象成View接口,把业务逻辑抽象成Presenter接口,Model类还是原来的Model。
在MVP模式中,Activity的功能就是响应生命周期和显示界面,具体其他工作都丢到了Presenter层中进行完成,Presenter其实是Model层和View层的桥梁。

创建MVP步骤:
1.创建IPresenter接口,把所有业务逻辑的接口都放在这里,并创建它的实现PresenterCompl(在这里可以方便查看业务逻辑功能,由于接口可以有多种实现所以也方便写单元测试)
2.创建IView接口,把所有视图逻辑的接口都放在这里,其实现类是当前的Activity/Fragment
3.Aactivity中只包含了一个IPresenter,而PresenterCompl里又包含了一个IView并且依赖了Model。Activity里只保留了IPresenter的调用,其他工作全部留到PresenterCompl中实现。
4.Model并不是必须有的,但是一定会有View和Presenter。

直接上例子:

1.创建Presenter接口

ILoginPresenter

package com.paul.learningmvp.presenter;

public interface ILoginPresenter {
//清除输入框
public void clear();
//登录操作
public void doLogin(String name,String password);
}

实现ILoginPresenteeer

LoginPresenterCompl

package com.paul.learningmvp.presenter;

import com.paul.learningmvp.model.User;
import com.paul.learningmvp.view.ILoginView; public class LoginPresenterCompl implements ILoginPresenter { private ILoginView loginView;
private User user; public LoginPresenterCompl(ILoginView loginView) {
this.loginView = loginView;
user=new User("110","123456");
} @Override
public void clear() {
loginView.onClearText();
} @Override
public void doLogin(String name, String password) {
boolean result=false;
int code=0;
if(name.equals(user.getName())&&password.equals(user.getPassword())){
result=true;
code=1;
}else {
result=false;
code=0;
}
loginView.onLoginResult(result,code);
}
}

2.创建IView接口,所有对View的操作写在这里,和Presenter相关

ILoginView

package com.paul.learningmvp.view;

public interface ILoginView {
public void onClearText();
public void onLoginResult(Boolean result,int code);
}

Activit是IView接口的实现类

LoginActivity

package com.paul.learningmvp.view;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast; import com.paul.learningmvp.R;
import com.paul.learningmvp.presenter.ILoginPresenter;
import com.paul.learningmvp.presenter.LoginPresenterCompl;
import com.paul.learningmvp.view.ILoginView; public class LoginActivity extends AppCompatActivity
implements ILoginView, View.OnClickListener { private Button mLogin;
private Button mClear;
private EditText mName;
private EditText mPassword;
ILoginPresenter loginPresenter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); mLogin=findViewById(R.id.btn_confirm);
mClear=findViewById(R.id.btn_clear);
mName=findViewById(R.id.tv_name);
mPassword=findViewById(R.id.tv_password); mLogin.setOnClickListener(this);
mClear.setOnClickListener(this);
loginPresenter=new LoginPresenterCompl(this);
} @Override
public void onClearText() {
mName.setText("");
mPassword.setText("");
Toast.makeText(this,"clear",Toast.LENGTH_SHORT).show();
} @Override
public void onLoginResult(Boolean result, int code) {
mLogin.setEnabled(true);
mClear.setEnabled(true);
if(result){
Toast.makeText(this,"登录成功",Toast.LENGTH_SHORT).show();
}else {
Toast.makeText(this,"登录失败",Toast.LENGTH_SHORT).show();
}
} @Override
public void onClick(View v) {
String name=mName.getText().toString();
String password=mPassword.getText().toString();
switch (v.getId()){
case R.id.btn_confirm:
loginPresenter.doLogin(name,password);
break;
case R.id.btn_clear:
loginPresenter.clear();
break;
}
}
}

3.model

User

package com.paul.learningmvp.model;

public class User {
private String name;
private String password; public User(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;
}
}

(未完成)【Android】MVP模式初见(一)的更多相关文章

  1. android MVP模式介绍与实战

    android MVP模式介绍与实战 描述 MVP模式是什么?MVP 是从经典的模式MVC演变而来,它们的基本思想有相通的地方:Controller/Presenter负责逻辑的处理,Model提供数 ...

  2. Android MVP模式

    转自http://segmentfault.com/blogs,转载请注明出处Android MVP Pattern Android MVP模式\[1\]也不是什么新鲜的东西了,我在自己的项目里也普遍 ...

  3. Android MVP模式 简单易懂的介绍方式

    主要学习这位大神的博客:简而易懂 Android MVP模式 简单易懂的介绍方式 https://segmentfault.com/a/1190000003927200

  4. Android MVP模式简单易懂的介绍方式 (三)

    Android MVP模式简单易懂的介绍方式 (一) Android MVP模式简单易懂的介绍方式 (二) Android MVP模式简单易懂的介绍方式 (三) 讲完M和P,接下来就要讲V了.View ...

  5. Android MVP模式简单易懂的介绍方式 (二)

    Android MVP模式简单易懂的介绍方式 (一) Android MVP模式简单易懂的介绍方式 (二) Android MVP模式简单易懂的介绍方式 (三) 上一篇文章我们介绍完了Model的创建 ...

  6. Android MVP模式简单易懂的介绍方式 (一)

    Android MVP模式简单易懂的介绍方式 (一) Android MVP模式简单易懂的介绍方式 (二) Android MVP模式简单易懂的介绍方式 (三) 最近正在研究Android的MVP模式 ...

  7. Android MVP模式 谷歌官方代码解读

    Google官方MVP Sample代码解读 关于Android程序的构架, 当前(2016.10)最流行的模式即为MVP模式, Google官方提供了Sample代码来展示这种模式的用法. Repo ...

  8. Android mvp模式、mvvm模式

    MVC和MVP的区别2007年08月08日 星期三 上午 09:23 MVC和MVP到底有什么区别呢? 从这幅图可以看到,我们可以看到在MVC里,View是可以直接访问Model的!从而,View里会 ...

  9. Xamarin.Android MVP模式

    一.简介 随着UI创建技术的功能日益增强,UI层也履行着越来越多的职责.为了更好地细分视图(View)与模型(Model)的功能,让View专注于处理数 据的可视化以及与用户的交互,同时让Model只 ...

随机推荐

  1. C语言的安装及使用

    安装 vc6.0 使用方法 new    ---  win32 Console Application ---  ok-ok     ------c++ Source File      ------ ...

  2. windows 安装mongodb2

    安装文件:mongodb-win32-x86_64-2008plus-ssl-3.2.6-signed.msi 电脑配置:win7 64位 MongoDB的安装很简单,设置好安装路径后,一直Next直 ...

  3. 释放innodb空间

    记一次MySQL运维 [root@b2btest ~]# free -h total used free shared buffers cached Mem: 125G 124G 780M 13M 2 ...

  4. PyCharm2019.3.3专业版完美激活

    在 PYPL 编程语言榜单上,Python 因近几年受欢迎程不断提高而继续霸榜.俗话说“萝卜青菜,各有所爱”,在众多的编辑器当中,因每个人的使用习惯不同,也会选择各自的喜欢的编辑器.Pycharm 分 ...

  5. Sophus库CMakeLists.txt内容详解笔记

    CMakeLists.txt: SET(PROJECT_NAME Sophus) PROJECT(${PROJECT_NAME}) CMAKE_MINIMUM_REQUIRED(VERSION 2.6 ...

  6. 51Nod 1021 石子归并(区间dp经典入门)

    题意: N堆石子摆成一条线.现要将石子有次序地合并成一堆.规定每次只能选相邻的2堆石子合并成新的一堆,并将新的一堆石子数记为该次合并的代价.计算将N堆石子合并成一堆的最小代价. n<=100 思 ...

  7. sqlserver backup and restore -- partital restore

    Like a tratitional database, sqlserver not only could resotre full database but also do restore one ...

  8. 实验楼-python3简明教程笔记

    #!/usr/bin/env python3 days = int(input("Enter days: ")) print("Months = {} Days = {} ...

  9. Hession矩阵(整理)

    二阶偏导数矩阵也就所谓的赫氏矩阵(Hessian matrix). 一元函数就是二阶导,多元函数就是二阶偏导组成的矩阵. 求向量函数最小值时用的,矩阵正定是最小值存在的充分条件. 经济学中常常遇到求最 ...

  10. 09-SpringMVC03

    今日知识 1. SpringMVC自定义异常处理 2. SpringMVC的interceptor(过滤器) SpringMVC自定义异常处理 1.web.xml正常写 <servlet> ...