小试Android的mvp

说到架构,这个是个很高深的问题,不懂。。但是,对于mvp架构来说,不算是太懂,但是也略知一二,今天来说道说道。

大家都知道mvc架构很经典,极大的简易了开发,提高了开发效率等等,很多优势,但是,那个是适用于网站开发的,对于app开发来说,就不太适用了。

mvc 的 v 就对应布局文件了,但是,布局文件做的事情挺少,(不讨论data-binder),这样事件的处理,数据的绑定都在activity中了,那activity的逻辑会很混乱了,所以mvp

就应运而生了。mvp架构是这样的:

  • View负责UI显示、用户交互
  • Presenter负责业务逻辑处理
  • Model负责数据处理
恩,就是这样的,与mvc的最大区别就是View与model并不直接交互,并且事情都交给presenter,activity不需要做什么事情。非常棒~
Android 中的MVP:
  • UI层一般包括activity,fragment,adapter等直接和UI相关的类
  • UI层的Activity在启动之后实例化相应的Presenter,App的控制权后移,
  • 由UI转移到Presenter,两者之间的通信通过接口完成,只传递事件和
    结果。
  • Presenter创建对应的Model,并操纵Model获取和处理数据,处理结果
    首先被Presenter获得,然后Presenter再去更新View。
oh了,了解了这么多的好处之后,那就直接上代码了。等会,先上张图~

,这个就是我写的结构啦~。

先来View层代码~
public interface LoginView {

    String  getUsername();

    String getPassword();

    boolean checkNull(String username,String passwrod);

    void setUserNullError();

    void setUserError();

    void ShowProgress();

    void hideProgress();
}

然后,presenter~

public interface ILoginPresenter {
    void login(String username,String password);

}
public class LoginPresenter implements ILoginPresenter{
    LoginView loginView;

    public LoginPresenter(LoginView loginView,LoginStatus loginStatus){
        this.loginView=loginView;
        this.loginStatus=loginStatus;
    }
    @Override
    public void login(final String username, final String password) {
        if(loginView==null){
            return;
        }
        if(loginView.checkNull(username,password)){
            loginView.ShowProgress();
            new Handler().postDelayed(new Runnable() {
                @Override
                public void run() {
                    loginView.hideProgress();
                    if(username.equals("zhangsan") && password.equals("123")){
                        if(loginStatus!=null){
                            LoginModel loginModel=new LoginModel(username,password);
                            loginStatus.LoginSuccess(loginModel);
                        }
                    }else {
                        if(loginStatus!=null){
                            loginStatus.LoginFail();
                        }
                    }
                }
            },2000);
        }else{
            loginView.setUserNullError();
        }
    }
    public interface LoginStatus{
        void LoginSuccess(LoginModel loginModel);

        void LoginFail();
    }
    private LoginStatus loginStatus;




恩,model就不上了,很简单,最后就是activity了

public class LoginActivity extends Activity implements LoginView,LoginPresenter.LoginStatus,View.OnClickListener{
    EditText username,password;
    ProgressBar progressBar;
    ILoginPresenter iLoginPresenter;
    Button button;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.login);
        username= (EditText) findViewById(R.id.username);
        password= (EditText) findViewById(R.id.password);
        progressBar= (ProgressBar) findViewById(R.id.progress);
        button= (Button) findViewById(R.id.button);
        button.setOnClickListener(this);
        iLoginPresenter=new LoginPresenter(this,this);
    }

    @Override
    public String getUsername() {
        return username.getText().toString();
    }

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

    public void showToast(String message) {
        Toast.makeText(this,message,Toast.LENGTH_SHORT).show();
    }

    @Override
    public boolean checkNull(String username, String passwrod) {
        if(!TextUtils.isEmpty(username) && !TextUtils.isEmpty(passwrod)){
            return true;
        }
        return false;
    }

    @Override
    public void setUserNullError() {
        showToast("账号或者密码不能为空");
    }

    @Override
    public void setUserError() {
        showToast("账号跟密码不匹配");
    }

    @Override
    public void ShowProgress() {
        progressBar.setVisibility(View.VISIBLE);
    }

    @Override
    public void hideProgress() {
        progressBar.setVisibility(View.INVISIBLE);
    }
    @Override
    public void LoginSuccess(LoginModel loginModel) {
        showToast("登录成功:"+loginModel.getUsername());
    }

    @Override
    public void LoginFail() {
        setUserError();
    }

    @Override
    public void onClick(View v) {
        iLoginPresenter.login(getUsername(),getPassword());
    }

好了,完美解释就这样结束了,还想再写点的~  无奈,下次吧。

最后送上demo链接 https://github.com/zhairui/Try_mvp


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值