浅谈MVP模式附有登陆Demo
2016-10-24 17:28
357 查看
一:概述
最近公司项目用的MVP模式,相比之前MVC结构来说简直不能适应啊~~,随着移动项目业务越来越复杂,功能越来越多一个耦合性低、扩展性强的项目结构就显的尤为重要。当然,如果要将你的项目转移到MVP模式,那么首先需要对MVP有深入的理解,不能仅仅停留在认知状态,所以研究了一下写了登陆的小Demo分享给大家,至于什么是MVP我们先看张图;
微博 ::http://weibo.com/icuihai
邮箱:icuihai@aliyun.com;
Github: https://github.com/icuihai
二,MVP模式:
MVC模式中逻辑代码一般都是写在view层也就是说写在activity或fragment中,在项目不是很大的情况下是能满足需要的,但是在项目逻辑比较复杂,功能比较多的时候就感觉activity中代码显得比较臃肿了,所以MVP应运而生。MVP 呢分为Model,View,Presenter三层,Model曾主要存放数据,实体类。VIew层当然对应的是Activity用来展示用户交互,Presenter也是最重要的一层负责View与MOdel交互。
三,实战
首先我先说下登陆的基本流程,用户输入账号和密码匹配成功则跳转到其他界面,失败则给出提示,当然我们的目的是练习MVP模式,不要纠结哪些什么网络请求,安全之类的~~~~~~~,
界面:
项目代码:
1,User实体类
[java] view
plain copy
public class UserBean {
private String username;
private String password;
public String getUsername(){
return username;
}
public void setUsername(String username){
this.username=username;
}
public String getPassword(){
return password;
}
public void setPassword(String password){
this.password= password;
}
}
2,
[html] view
plain copy
public interface IUser {
void login(String username, String password, OnLoginListener onLoginListener);
}
[html] view
plain copy
public class User implements IUser {
@Override
public void login(final String username, final String password, final OnLoginListener onLoginListener) {
handler.post(new Runnable() {
@Override
public void run() {
if ("cuihai".equals(username) && "123".equals(password)) {
UserBean userBean = new UserBean();
userBean.setUsername(username);
userBean.setPassword(password);
onLoginListener.loadSuccess(userBean);
} else {
onLoginListener.showFailed();
}
}
});
}
Handler handler = new Handler();
}
[html] view
plain copy
public interface OnLoginListener {
void loadSuccess(UserBean userBean);
void showFailed();
}
3,View层
[html] view
plain copy
public interface IUserView {
String getUsername();
String getPassword();
void startLoginActivity(UserBean userBean);
void showFailed();
}
4,Presenter层
[html] view
plain copy
public class UserPresenter {
IUserView iUserView;
IUser iUser;
public UserPresenter(IUserView iUserView){
this.iUserView=iUserView;
this.iUser=new User();
}
Handler handler=new Handler();
public void login(){
iUser.login(iUserView.getUsername(), iUserView.getPassword(), new OnLoginListener() {
@Override
public void loadSuccess(final UserBean userBean) {
handler.post(new Runnable() {
@Override
public void run() {
iUserView.startLoginActivity(userBean);
}
});
}
@Override
public void showFailed() {
iUserView.showFailed();
}
});
}
}
5,Activity
[html] view
plain copy
package com.cuihai.mvpdemo;
public class MainActivity extends AppCompatActivity implements IUserView {
EditText mUsername;
EditText mPassword;
Button mLogin;
UserPresenter userPresenter=new UserPresenter(this);
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mUsername = (EditText) findViewById(R.id.username);
mPassword = (EditText) findViewById(R.id.password);
mLogin= (Button) findViewById(R.id.login);
mLogin.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
userPresenter.login();
}
});
}
@Override
public String getUsername() {
return mUsername.getText().toString();
}
@Override
public String getPassword() {
return mPassword.getText().toString();
}
@Override
public void startLoginActivity(UserBean userBean) {
Intent intent=new Intent(MainActivity.this, LoginActivity.class);
startActivity(intent);
}
@Override
public void showFailed() {
Toast.makeText(MainActivity.this, "账号或密码错误", Toast.LENGTH_SHORT).show();
}
}
跳转的LoginActivity里面没什么,这里就不贴出来了,操作界面:
http://www.17sysj.com/video/lpds_b6b2434a5570a
其实在项目中到底是选择MVC还是MVP取决于你的项目复杂程度,不能为了使用MVP而使用,合适的才是最好的,不是吗~~~~~;
最近公司项目用的MVP模式,相比之前MVC结构来说简直不能适应啊~~,随着移动项目业务越来越复杂,功能越来越多一个耦合性低、扩展性强的项目结构就显的尤为重要。当然,如果要将你的项目转移到MVP模式,那么首先需要对MVP有深入的理解,不能仅仅停留在认知状态,所以研究了一下写了登陆的小Demo分享给大家,至于什么是MVP我们先看张图;
微博 ::http://weibo.com/icuihai
邮箱:icuihai@aliyun.com;
Github: https://github.com/icuihai
二,MVP模式:
MVC模式中逻辑代码一般都是写在view层也就是说写在activity或fragment中,在项目不是很大的情况下是能满足需要的,但是在项目逻辑比较复杂,功能比较多的时候就感觉activity中代码显得比较臃肿了,所以MVP应运而生。MVP 呢分为Model,View,Presenter三层,Model曾主要存放数据,实体类。VIew层当然对应的是Activity用来展示用户交互,Presenter也是最重要的一层负责View与MOdel交互。
三,实战
首先我先说下登陆的基本流程,用户输入账号和密码匹配成功则跳转到其他界面,失败则给出提示,当然我们的目的是练习MVP模式,不要纠结哪些什么网络请求,安全之类的~~~~~~~,
界面:
项目代码:
1,User实体类
[java] view
plain copy
public class UserBean {
private String username;
private String password;
public String getUsername(){
return username;
}
public void setUsername(String username){
this.username=username;
}
public String getPassword(){
return password;
}
public void setPassword(String password){
this.password= password;
}
}
2,
[html] view
plain copy
public interface IUser {
void login(String username, String password, OnLoginListener onLoginListener);
}
[html] view
plain copy
public class User implements IUser {
@Override
public void login(final String username, final String password, final OnLoginListener onLoginListener) {
handler.post(new Runnable() {
@Override
public void run() {
if ("cuihai".equals(username) && "123".equals(password)) {
UserBean userBean = new UserBean();
userBean.setUsername(username);
userBean.setPassword(password);
onLoginListener.loadSuccess(userBean);
} else {
onLoginListener.showFailed();
}
}
});
}
Handler handler = new Handler();
}
[html] view
plain copy
public interface OnLoginListener {
void loadSuccess(UserBean userBean);
void showFailed();
}
3,View层
[html] view
plain copy
public interface IUserView {
String getUsername();
String getPassword();
void startLoginActivity(UserBean userBean);
void showFailed();
}
4,Presenter层
[html] view
plain copy
public class UserPresenter {
IUserView iUserView;
IUser iUser;
public UserPresenter(IUserView iUserView){
this.iUserView=iUserView;
this.iUser=new User();
}
Handler handler=new Handler();
public void login(){
iUser.login(iUserView.getUsername(), iUserView.getPassword(), new OnLoginListener() {
@Override
public void loadSuccess(final UserBean userBean) {
handler.post(new Runnable() {
@Override
public void run() {
iUserView.startLoginActivity(userBean);
}
});
}
@Override
public void showFailed() {
iUserView.showFailed();
}
});
}
}
5,Activity
[html] view
plain copy
package com.cuihai.mvpdemo;
public class MainActivity extends AppCompatActivity implements IUserView {
EditText mUsername;
EditText mPassword;
Button mLogin;
UserPresenter userPresenter=new UserPresenter(this);
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mUsername = (EditText) findViewById(R.id.username);
mPassword = (EditText) findViewById(R.id.password);
mLogin= (Button) findViewById(R.id.login);
mLogin.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
userPresenter.login();
}
});
}
@Override
public String getUsername() {
return mUsername.getText().toString();
}
@Override
public String getPassword() {
return mPassword.getText().toString();
}
@Override
public void startLoginActivity(UserBean userBean) {
Intent intent=new Intent(MainActivity.this, LoginActivity.class);
startActivity(intent);
}
@Override
public void showFailed() {
Toast.makeText(MainActivity.this, "账号或密码错误", Toast.LENGTH_SHORT).show();
}
}
跳转的LoginActivity里面没什么,这里就不贴出来了,操作界面:
http://www.17sysj.com/video/lpds_b6b2434a5570a
其实在项目中到底是选择MVC还是MVP取决于你的项目复杂程度,不能为了使用MVP而使用,合适的才是最好的,不是吗~~~~~;
相关文章推荐
- MVP模式---Demo
- [转]浅谈MVP与Model-View-ViewModel(MVVM)设计模式
- 浅谈MVP架构及开发模式
- 浅谈MVP架构及开发模式
- Android学习之浅谈对MVC模式和MVP模式的理解
- 浅谈MVP与Model-View-ViewModel(MVVM)设计模式
- Android设计模式之浅谈MVP
- 浅谈Android开发中内存泄露与优化与框架模式之MVC与MVP
- Android实现竖着的滑动刻度尺效果,选择身高(竖向的)Android实现滑动刻度尺效果,选择身高体重和生日------浅谈Andorid开发中的MVP模式
- 浅谈Android中的MVC与MVP模式
- 浅谈MVP与Model-View-ViewModel(MVVM)设计模式
- Android设计模式之浅谈MVP
- 浅谈MVP设计模式
- Android设计模式之浅谈MVP
- Android MVP模式之模拟登陆功能
- 浅谈MVP与Model-View-ViewModel(MVVM)设计模式
- 浅谈MVP与Model-View-ViewModel(MVVM)设计模式
- MVP 模式编写刷新 Web Session 会话实例小Demo,实战代码,清晰明了,维护简单
- Android设计模式之浅谈MVP
- Android设计模式之浅谈MVP