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

虽然是个人开发(水平很菜的那种),但最终都要向企业正式项目开发靠近。因此接下来一段时间,主要学习一下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. 爬虫之 App 爬取

    - 移动端数据的爬取- 抓包工具: - fiddler - 青花瓷 - miteproxy - 环境的搭建 1.对fiddler进行配置:tools->options->connectio ...

  2. Navicat premium 12 for mac 无限试用

    Mac 终端输入 sudo rm -Rf ~/Library/Application\ Support/PremiumSoft\ CyberTech 重启电脑 成功

  3. springIOC源码接口分析(八):AutowireCapableBeanFactory

    参考博文: https://blog.csdn.net/f641385712/article/details/88651128 一 接口规范 从宏观上看,AutowireCapableBeanFact ...

  4. [白话解析] 带你一起梳理Word2vec相关概念

    [白话解析] 带你一起梳理Word2vec相关概念 0x00 摘要 本文将尽量使用易懂的方式,尽可能不涉及数学公式,而是从整体的思路上来说,运用感性直觉的思考来帮大家梳理Word2vec相关概念. 0 ...

  5. Codeforces 1248C Ivan the Fool and the Probability Theory(推公式)

    题意 一个n*m的网格图,每个格子可以染黑色.白色,问你每个格子最多有一个相邻颜色相同的方案数 n,m<=1e5 思路 我们先处理\(1 \times m\)的情况 设\(f[i][j]\)为前 ...

  6. HDU 6274 Master of Sequence (暴力+下整除)

    题意 两个1e5的数组a,b,定义\(S(t)=\left \lfloor \frac{t-b_i}{a_i} \right \rfloor\),有三个操作 1 x y:将\(a[x]\)变为\(y\ ...

  7. 9.3.1 map端连接- DistributedCache分布式缓存小数据集

    1.1.1         map端连接- DistributedCache分布式缓存小数据集 当一个数据集非常小时,可以将小数据集发送到每个节点,节点缓存到内存中,这个数据集称为边数据.用map函数 ...

  8. vs 搭配 Linux 开发

    这是一篇翻译,为什么突然想翻译文章了呢,因为很多大佬们都说英语对程序员还是挺重要的,毕竟互联网的最新技术基本都在歪果仁那边,如果英语不好,不会看国外的文档的话,将会错失接触第一手资料的机会,失去很多先 ...

  9. 【算法】混合流体模拟demo

    展示一个流体模拟算法的实现 地址:http://www.iqiyi.com/w_19rzs1anol.html 采用C++编写,Blender渲染. 截图 参考文献 REN, B., LI, C., ...

  10. 使用newtonsoft完美序列化WebApi返回的ValueTuple

    由于开发功能的需要,又懒得新建太多的class,所以ValueTuple是个比较好的偷懒方法,但是,由于WebApi需要返回序列化后的json,默认的序列化只能将ValueTuple定义的各个属性序列 ...