MVP快速开发框架

所谓MVP(Model-View-Presenter)模式。是将APP的结构分为三层:

view - UI显示层

view 层主要负责:

  1. 提供UI交互
  2. 在presenter的控制下修改UI。
  3. 将业务事件交由presenter处理。
    注意. View层不存储数据,不与Model层交互。

presenter - 逻辑处理层

presenter 层主要负责:

  1. 对UI的各种业务事件进行相应处理。也许是与Model层交互,也许自己进行一些计算,也许控制后台Task,Servic
  2. 对各种订阅事件进行响应,修改UI。
  3. 临时存储页面相关数据。
    注意. Presenter内不出现View引用。

model - 数据层

model层主要负责:

  1. 从网络,数据库,文件,传感器,第三方等数据源读写数据。
  2. 对外部的数据类型进行解析转换为APP内部数据交由上层处理。
  3. 对数据的临时存储,管理,协调上层数据请求。

如图示,里面的activity,presenter,model均为例子:


mvp

将复杂的功能分割为各层内的小问题。各层内功能单一。这样易于功能修改拓展与Debug。
解耦的设计,独立的模块,更有利于分工开发与测试。

简单例子如下

UserBean.java

package com.example.mvptest.com.example.bean;

/**
 * Created by Administrator on 2016/6/2.
 */
public class UserBean {
    private String mobile;
    private String userpwd;

    public UserBean(String mobile, String userpwd) {
        this.mobile = mobile;
        this.userpwd = userpwd;
    }

    public String getMobile() {
        return mobile;
    }

    public String getUserpwd() {
        return userpwd;
    }
}

Model层

IUserModel.java和UserModel.java

public interface IUserModel {

    void setID(int id);
    void setMobile(String mobile);
    void setUserPwd(String userpwd);
    UserBean load(int id);
}
package com.example.mvptest.com.example.model;

import android.util.SparseArray;

import com.example.mvptest.com.example.bean.UserBean;

/**
 * Created by Administrator on 2016/6/2.
 */
public class UserModel implements IUserModel {
    private String usermobile;
    private String userPwd;
    private int mID;
    private SparseArray<UserBean> mUserArray = new SparseArray<UserBean>();

    @Override
    public void setID(int id) {
        mID = id;
    }

    @Override
    public void setMobile(String mobile) {
        usermobile = mobile;
    }

    @Override
    public void setUserPwd(String userpwd) {
        userPwd = userpwd;
        UserBean userBean = new UserBean(usermobile, userpwd);
        mUserArray.append(mID, userBean);
    }

    @Override
    public UserBean load(int id) {
        mID = id;
        UserBean userBean = mUserArray.get(mID, new UserBean("no data", "not data"));
        return userBean;
    }
}

View层

package com.example.mvptest.com.example.view;

/**
 * Created by Administrator on 2016/6/2.
 */
public interface IUserView {
    int getID();
    String getMobile();
    String getUserPwd();
    void setMobile(String mobile);
    void setUserpwd(String userpwd);
}

Presenter层

package com.example.mvptest.com.example.presenter;

import com.example.mvptest.com.example.bean.UserBean;
import com.example.mvptest.com.example.model.IUserModel;
import com.example.mvptest.com.example.model.UserModel;
import com.example.mvptest.com.example.view.IUserView;

/**
 * Created by Administrator on 2016/6/2.
 */
public class UserPresenter {
    private IUserView mUserView;
    private IUserModel mUserModel;

    public UserPresenter(IUserView mUserView) {
        this.mUserView = mUserView;
        this.mUserModel = new UserModel();
    }

    public void saveUser(int id, String mobile, String userpwd) {
        mUserModel.setID(id);
        mUserModel.setMobile(mobile);
        mUserModel.setUserPwd(userpwd);
    }

    public void loadUser(int id) {
        UserBean user = mUserModel.load(id);
        mUserView.setMobile("bb"+user.getMobile());
        mUserView.setUserpwd(user.getUserpwd());
    }
}

Activity层实现IUserView接口

public class MainActivity extends AppCompatActivity implements View.OnClickListener, IUserView{
    private EditText mobileEdt, pwdEdt;
    UserPresenter presenter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        findViewById(R.id.save).setOnClickListener(this);
        findViewById(R.id.load).setOnClickListener(this);

        mobileEdt = (EditText) findViewById(R.id.mobile);
        pwdEdt = (EditText) findViewById(R.id.passwd);

        presenter = new UserPresenter(this);
    }

    @Override
    public int getID() {
        return 3;
    }

    @Override
    public String getMobile() {
        return mobileEdt.getText().toString();
    }

    @Override
    public String getUserPwd() {
        return pwdEdt.getText().toString();
    }

    @Override
    public void setMobile(String mobile) {
        mobileEdt.setText(mobile);
    }

    @Override
    public void setUserpwd(String userpwd) {
        pwdEdt.setText(userpwd);
    }

    @Override
    public void onClick(View view) {
        switch (view.getId()) {
            case R.id.save:
                presenter.saveUser(3, getMobile(), getUserPwd());
                break;
            case R.id.load:
                presenter.loadUser(3);
                break;
            default:
                break;
        }
    }
}

 

 

 

复杂例子:
https://github.com/wenhuaijun/SearchPictureTool

 

转载于:https://www.cnblogs.com/speculator/p/5546540.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值