Android框架模式——MVP

一、MVP介绍

MVP(Model-View-Presenter)是MVC的演化版本。

  • Model:主要提供数据的存取功能。Presenter需要通过Model层来存储、获取数据。
  • View:负责处理用户事件和视图部分的展示。在Android中,它可能是Activity、Fragment类或者是某个View控件。
  • Presenter:作为View和Model之间沟通的桥梁,它从Model层检索数据后返回给View层,使得View和Model之间没有耦合。
    在这里插入图片描述

二、简例

简例参考鸿洋博客
下面举个简单的例子来实现登录。
工程结构如下:在这里插入图片描述

Model层

用户包含账号密码

package com.android.myapplication.model;

public class User {
    private String name;
    private String password;

    public User() {
    }

    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;
    }
}

定义一个登录接口

package com.android.myapplication.model;

public interface IUserLogin {
    void login(String name, String password, AddUserLoginListener loginListener);
}

实现该接口,判断登录情况

package com.android.myapplication.model;

public class UserLogin implements IUserLogin {
    @Override
    public void login(String name, String password, AddUserLoginListener loginListener) {
        User user = new User();
        user.setName(name);
        user.setPassword(password);
        if (name.equals("zhangsan") && password.equals("123")) {
            loginListener.loginSuccess(user);
        } else {
            loginListener.loginFailed(user);
        }
    }
}

定义一个监听事件,监听登录成功和失败事件

package com.android.myapplication.model;

public interface AddUserLoginListener {
    void loginSuccess(User user);
    void loginFailed(User user);
}
View层

定义一个接口,为Presenter访问

package com.android.myapplication.view;

import com.android.myapplication.model.User;

public interface IUserLoginView {
    String getName();

    String getPassword();

    void onSuccess(User user);

    void onFailed(User user);
}

View的实现类,也就是Activity

package com.android.myapplication;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

import com.android.myapplication.model.User;
import com.android.myapplication.presenter.UserLoginPresenter;
import com.android.myapplication.view.IUserLoginView;

public class MVPActivity extends AppCompatActivity implements IUserLoginView {
    private EditText mEtName;
    private EditText mEtPassword;
    private Button mButtonLogin;
    private UserLoginPresenter mUserLoginPresenter = new UserLoginPresenter(this);

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

        initView();
    }

    private void initView() {
        mEtName = findViewById(R.id.et_name);
        mEtPassword = findViewById(R.id.et_password);
        mButtonLogin = findViewById(R.id.bt_login);

        mButtonLogin.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                mUserLoginPresenter.login();
            }
        });
    }

    @Override
    public String getName() {
        return mEtName.getText().toString();
    }

    @Override
    public String getPassword() {
        return mEtPassword.getText().toString();
    }

    @Override
    public void onSuccess(User user) {
        Toast.makeText(this, "用户:" + user.getName() +
                "登录成功", Toast.LENGTH_LONG).show();
    }

    @Override
    public void onFailed(User user) {
        Toast.makeText(this, "用户:" + user.getName() +
                "账号或密码错误", Toast.LENGTH_LONG).show();
    }
}
Presenter层

连接Model和View

package com.android.myapplication.presenter;

import android.util.Log;

import com.android.myapplication.model.AddUserLoginListener;
import com.android.myapplication.model.IUserLogin;
import com.android.myapplication.model.User;
import com.android.myapplication.model.UserLogin;
import com.android.myapplication.view.IUserLoginView;

public class UserLoginPresenter {
    private IUserLoginView userLoginView;
    private IUserLogin userLogin;

    public UserLoginPresenter(IUserLoginView userLoginView) {
        this.userLoginView = userLoginView;
        userLogin = new UserLogin();
    }

    public void login(){
        userLogin.login(userLoginView.getName(), userLoginView.getPassword(), new AddUserLoginListener() {
            @Override
            public void loginSuccess(User user) {
                userLoginView.onSuccess(user);
            }

            @Override
            public void loginFailed(User user) {
                userLoginView.onFailed(user);
            }
        });
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值