(未完成)【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只 ...
随机推荐
- 宝塔面板管理阿里云服务器FTP不能用
# 宝塔面板管理阿里云,ftp不能用 解决方法 搜ftp点击设置 然后Ctrl+F搜索ForcePassiveIP 注意2在默认情况下是带#号的,去掉#号,后面的ip地址是阿里云的公网ip 重启,再次 ...
- STM8 关闭PWM输出后的电平输出问题解决
STM系列的单片机PWM输出如果被关断比如用TIM1_CtrlPWMOutputs进行停止输出后,电平的高低处于不确定的状态. 他取决于: 1.GPIO初始化的特性 2.关断那一刻时的电平 3.CCM ...
- BeautifulSoup标签定位方法总结
首先说明一下两个基本函数 .find() 和 .findAll(). find()返回第一个符合要求的标签 findAll()返回一个由所有符合要求的标签组成的列表.除此之外基本相同. 0.直接定位 ...
- AS中使用真机调试时出现解析错误的问题
时间:2019/12/8 今天使用usb调试程序时手机上出现了解析错误的问题,其实这个问题很简单,主要可能是你想要调试的程序的最低版本号大于你手机的安卓版本号的原因,只需要修改下面这个地方: buil ...
- Message: 'chromedriver' executable needs to be available in the path.
环境:windows10 python:3.7.3 已经把 executable.exe 添加到了环境变量中,但还是会提示以上错误. 解决办法: from selenium import webdri ...
- Docker 使用笔记-常用基础命令
常用基础命令 环境:Linux Ubuntu 1.查看docker信息 docker version | docker info 2.启动docker服务 sudo systemctl start d ...
- 【大白话系列】MySQL 学习总结 之 初步了解 InnoDB 存储引擎的架构设计
一.存储引擎 上节我们最后说到,SQL 的执行计划是执行器组件调用存储引擎的接口来完成的. 那我们可以理解为:MySQL 这个数据库管理系统是依靠存储引擎与存放数据的磁盘文件进行交互的. 那么 MyS ...
- printf的用法进阶
今天来好好总结一下C语言中关于printf的常用用法 基础部分 printf("%d\n", numInt); printf("%f\n", numFloat) ...
- ATL的GUI程序设计(2)
from:http://blog.titilima.com/atlgui-2.html 第二章 一个最简单窗口程序的转型 我知道,可能会有很多朋友对上一章的"Hello, World!&qu ...
- Goland2019.3.2永久破解
2019.11.28 jetbrains公司发布了Go的最强编辑器GoLand 2019.3.本次更新软件消耗更少的CPU和更快的性能,增强了对Go Modules的支持,添加了一组新的快速修复程序, ...