Android中的MVP框架说明和举例

概述

MVP(Model-View-Presenter)分层框架模式,它是Android逻辑交互框架中比较重要的一个。其中M V P具体的意义说明如下。

  • Model:        模型层,作为功能模型。它主要做负责各类具体的操作,比如存取数据、接口调用等等;
  • View:          视图层,这一点和MVC基本没有差别,代表着布局和控件;
  • Presenter:  主持层,作为M和V的中介,它主持着View与Model之间的交互。

    MVP框架的主要特点是视图层和功能层完全隔离,二者的交互完全通过主持层。这样做减少了Activity中的臃肿代码,也使得Activity保持简洁明了。
    mvp


代码举例

这里举一个最简单的例子,以登录操作为例。情形是这样的:点击activity中的一个登录按钮执行具体的登录操作。

【Model层】

/**
 * Model层 接口
 * 内部封装一个登录方法(这里只是举一个最简单的例子,不写登录回调了)
 * Presenter层就是通过这个方法调用Model层的
 */
public interface LoginBaseModel {
    void doLogin(String name, String password);
}
/**
 * 具体的Model层实现类
 * 负责执行具体从登录操作
 */
public class LoginConcreteModel implements LoginBaseModel {

    @Override
    public void doLogin(String name, String password) {
        //TODO 登录操作
    }
}

【Presenter层】

/**
 * Presenter层 接口
 * 封装了登录方法(对View层公开)
 */
public interface LoginBasePresenter {
    void doLogin(String name, String password);
}
/**
 * Presenter层 实现类
 * 该类汇聚了Model层和View层对象,在需要处调用即可
 */
public class LoginConcretePresenter implements LoginBasePresenter {
    private LoginBaseModel mLoginBaseModel;//引用了Model层的对象,在需要时调用
    private LoginView mLoginBaseView; //引用了View层的对象

    public LoginConcretePresenter(LoginView loginView) {
        this.mLoginBaseModel = new LoginConcreteModel();
        this.mLoginBaseView = loginView;
    }

    /**
     * 执行登录
     * 该方法分别调动了Model层和View层的方法
     * @param name
     * @param password
     */
    @Override
    public void doLogin(String name, String password) {
        mLoginBaseView.showProgress(true);
        mLoginBaseModel.doLogin(name, password);
    }

}

【View层】

/**
 * View层 接口
 * 该类简单封装了一个方法 
 * Presenter层就是通过该方法对View层进行控制的
 */
public interface LoginView {

    void showProgress(boolean visible);

}
public class LoginActivity extends Activity implements LoginView {

    private LoginBasePresenter mLoginBasePresenter;
    private Button submit;
    private EditText username;
    private EditText password;

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

    private void initVariables() {
        mLoginBasePresenter = new LoginConcretePresenter(this);
    }

    private void initViews() {
        username = (EditText) findViewById(R.id.username);
        password = (EditText) findViewById(R.id.password);
        submit = (Button) findViewById(R.id.submit);
        submit.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                mLoginBasePresenter.doLogin(username.getText().toString(), password.getText().toString());
            }
        });
    }

    @Override
    public void showProgress(boolean visible) {

    }
}
阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wangzunkuan/article/details/80351044
个人分类: Android应用开发
上一篇利用LruCache类缓存图片资源
下一篇Java设计模式——组合模式
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭