(未完成)【Android】MVP模式初见(一)
最近在阅读郭霖大神的公众号时,分类中架构引起了我的注意。
虽然是个人开发(水平很菜的那种),但最终都要向企业正式项目开发靠近。因此接下来一段时间,主要学习一下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模式初见(一)的更多相关文章
- android MVP模式介绍与实战
android MVP模式介绍与实战 描述 MVP模式是什么?MVP 是从经典的模式MVC演变而来,它们的基本思想有相通的地方:Controller/Presenter负责逻辑的处理,Model提供数 ...
- Android MVP模式
转自http://segmentfault.com/blogs,转载请注明出处Android MVP Pattern Android MVP模式\[1\]也不是什么新鲜的东西了,我在自己的项目里也普遍 ...
- Android MVP模式 简单易懂的介绍方式
主要学习这位大神的博客:简而易懂 Android MVP模式 简单易懂的介绍方式 https://segmentfault.com/a/1190000003927200
- Android MVP模式简单易懂的介绍方式 (三)
Android MVP模式简单易懂的介绍方式 (一) Android MVP模式简单易懂的介绍方式 (二) Android MVP模式简单易懂的介绍方式 (三) 讲完M和P,接下来就要讲V了.View ...
- Android MVP模式简单易懂的介绍方式 (二)
Android MVP模式简单易懂的介绍方式 (一) Android MVP模式简单易懂的介绍方式 (二) Android MVP模式简单易懂的介绍方式 (三) 上一篇文章我们介绍完了Model的创建 ...
- Android MVP模式简单易懂的介绍方式 (一)
Android MVP模式简单易懂的介绍方式 (一) Android MVP模式简单易懂的介绍方式 (二) Android MVP模式简单易懂的介绍方式 (三) 最近正在研究Android的MVP模式 ...
- Android MVP模式 谷歌官方代码解读
Google官方MVP Sample代码解读 关于Android程序的构架, 当前(2016.10)最流行的模式即为MVP模式, Google官方提供了Sample代码来展示这种模式的用法. Repo ...
- Android mvp模式、mvvm模式
MVC和MVP的区别2007年08月08日 星期三 上午 09:23 MVC和MVP到底有什么区别呢? 从这幅图可以看到,我们可以看到在MVC里,View是可以直接访问Model的!从而,View里会 ...
- Xamarin.Android MVP模式
一.简介 随着UI创建技术的功能日益增强,UI层也履行着越来越多的职责.为了更好地细分视图(View)与模型(Model)的功能,让View专注于处理数 据的可视化以及与用户的交互,同时让Model只 ...
随机推荐
- 安装Eclipse activity插件 报异常 Cannot complete the install because one or more required items could not be
下载插件:Activiti Designer 5.17 2)安装过程中错误处理 a.错误: Cannot complete the install because one or more requir ...
- 精心整理「服务器Linux C/C++」 成长路程(附思维导图)
前言 我不是名校毕业,更没有大厂的背景,我只是一个毕业不到 2 年的普普通通的程序员,在摸爬滚打的工作这段时间里,深知了有一个「完整的知识体系」是非常重要的.当事人非常后悔没有在大学期间知道这个道理- ...
- 初识Redis,看这一篇就够了
环境的搭建和安装网上有很多教程,在这里就不再重复了. 1. Redis是什么? Redis(全称:Remote Dictionary Server 远程字典服务)是一个开源的使用ANSI C语言编写. ...
- 遇到的一些在ie下的兼容问题和解决方案(ie10+)
1,ie 10下实现水平垂直居中,不固定高度的话,正常的top:50%,left:50%,transform(translate(-50%,-50%)) 是不能实现的,ie下top:50%会失去效果. ...
- Markdown 教程
Markdown 简介 Markdown 是一种轻量级标记语言,它允许人们使用易读易写的纯文本格式编写文档. Markdown 语言在 2004 由约翰·格鲁伯(英语:John Gruber)创建. ...
- POJ_1042_贪心
题目描述: 每组数据给你n个胡,h小时时间,每个湖一次可钓鱼数量,每个湖每次钓鱼后下次可钓鱼数量的减少量,从每个湖到下一个湖所需时间.求最大钓鱼量. 要注意的是,刚开始在第一个湖,每次移动只能往下一个 ...
- hive命令
1.库命令:show databases; 查看所有库名select current_database(); 显示当前数据库:describe database publish; 查看某个库信息use ...
- postman之下载文件
前言 小伙伴们在实际的测试工作中是否遇到过下载的接口呢,例如网盘的项目就涉及到上传和下载的接口了,那么我们如何利用postman对下载接口进行测试呢?下面我们一起来学习吧! 练习案例:下载接口:htt ...
- Descriptor - Python 描述符协议
描述符(descriptor) descriptor 是一个实现了 __get__. __set__ 和 __delete__ 特殊方法中的一个或多个的. 与 descriptor 有关的几个名词解释 ...
- 本地linux搭建的WordPress升级时需要输入FTP信息
转自:https://blog.csdn.net/weixin_43837883/article/details/88751871 这是因为目录权限不正确所致 解决方法: 1.使用命令chown -R ...