深入浅出Android中的MVP模式

48 篇文章 9 订阅
43 篇文章 4 订阅

MVP模式是在MVC模式的基础之上改进而来的。MVP模式分为:model,view,presenter三部分。三部分的关系如下图所示:

这里写图片描述
其中PresenterCompl实现IPresenter接口,PresenterCompl中的方法要改变view时通过调用IView中的方法来实现。Model层为PresenterCompl提供数据。
也就是说之前MVC中view的控制都是在activity中实现,但是MVP中对于view的控制在PresenterCompl中实现,但是PresenterCompl又不能够直接的操作view,就通过IView内中的方法来间接的实现控制。
下面来看一个用户登录实现MVP模式的例子:
这里写图片描述这里写图片描述

由上面可以看出View和PresenterCompl和ILoginView的关系。
下面给出整个项目的代码:
这里写图片描述

UserBean:

public class UserBean {
    String name;
    String password;

    public UserBean(String name, String password) {
        this.name = name;
        this.password = password;
    }

    public String getName() {
        return name;
    }

    public String getPassword() {
        return password;
    }
}

ILoginPresenter:

public interface ILoginPresenter {
    void clear();
    void doLogin(String name,String password);
}

ILoginPresenterCompl:

public class ILoginPresenterCompl implements ILoginPresenter{
    private ILogView iLogView;
    private UserBean userBean;
    public ILoginPresenterCompl(ILogView view) {
        iLogView=view;
        userBean=new UserBean("hanking","123456");
    }

    @Override
    public void clear() {
        iLogView.onClearText();
    }

    @Override
    public void doLogin(String name, String password) {
        if (name.equals(userBean.getName())&&password.equals(userBean.getPassword()))
        {
            iLogView.onLoginResult(true);
        }
        else
        {
            iLogView.onLoginResult(false);
        }
    }
} 

ILogView:

public interface ILogView {
    void onClearText();
    void onLoginResult(boolean result);
}

LoginActivity:

public class LoginActivity extends AppCompatActivity implements ILogView,View.OnClickListener{
    private EditText name,password;
    private Button mLogin,mClear;
    private ILoginPresenter loginPresenter;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        loginPresenter=new ILoginPresenterCompl(this);
        InitView();
    }
   public void InitView()
   {
      name=(EditText)findViewById(R.id.name);
       password=(EditText)findViewById(R.id.password);
       mClear=(Button)findViewById(R.id.Clear);
       mLogin=(Button)findViewById(R.id.mLogin);
       mLogin.setOnClickListener(this);
       mClear.setOnClickListener(this);
   }
    @Override
    public void onClearText() {
        name.setText("");
        password.setText("");
    }

    @Override
    public void onLoginResult(boolean result) {
        if (result==true)
        {
            Toast.makeText(this,"登录成功!",Toast.LENGTH_SHORT).show();
        }
        else if (result==false)
        {
            Toast.makeText(this,"登录失败!",Toast.LENGTH_SHORT).show();
        }
    }

    @Override
    public void onClick(View v) {
        int id=v.getId();
        String uname=name.getText().toString();
        String upassword=password.getText().toString();
        switch (id)
        {
            case R.id.Clear:loginPresenter.clear();break;
            case R.id.mLogin:loginPresenter.doLogin(uname,upassword);break;
        }
    }
}   

由上面代码可以知道:IView中负责View的变化,IPresenterCompl中负责对于View中的逻辑控制,也就是说当view要改变时通过IPresenterCompl调用IView中的方法来实现。UserBean中主要是数据对象。
源码下载地址(Android stdio可直接运行)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值