mvp java_Android开发之MVP

MVP:Model,View和Presenter

作用:分离VIew和Model,通过接口实现VIew和Presenter的交互,有利于单元测试,同时较少Activity的代码,Presenter分担原来在Activity实现的逻辑代码。

代码实现:

1,定义IView和IPresenter

public interface IView {

Activity getActivity();

}

public interface IPresenter {

void detachView();

}

2,定义BaseView(BaseActivity和BaseFragment)和BasePresenter,分别集成IView和IPresenter

public abstract class BaseView

extends Activity implements IView {

protected P prosenter;

@Override

protected void onCreate(@Nullable Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

prosenter = bindPresenter();

}

protected abstract P bindPresenter();

@Override

public Activity getActivity() {

return this;

}

@Override

protected void onDestroy() {

super.onDestroy();

if (prosenter != null) prosenter.detachView();

}

}

public class BasePresenter implements IPresenter {

protected Reference MvpView;

public BasePresenter(V view) {

MvpView = new WeakReference<>(view);

}

protected V getView() {

if (MvpView != null) {

return MvpView.get();

}

return null;

}

protected boolean isAttach() {

return MvpView != null && MvpView.get() != null;

}

@Override

public void detachView() {

if (MvpView != null) {

MvpView.clear();

MvpView = null;

}

}

}

3,MainActivity和MainPresenter开始使用,在使用之前先创建MainContacts类来管理MVP

public class MainContact {

public interface ILogMode {

void login(String name, String pwd, IModelResultListenet backListenet);

}

public interface ILogView extends IView {

void success(boolean isSuccess);

}

public interface ILogPresenter extends IPresenter{

void login(String name, String pwd);

}

}

public class MainActivity extends BaseView implements MainContact.ILogView {

@Override

public void success(boolean isSuccess) {

}

@Override

protected MainPresenter bindPresenter() {

return new MainPresenter(this);

}

void init() {

prosenter.login("", "");

}

}

public class MainPresenter extends BasePresenter implements MainContact.ILogPresenter {

LogModel mLogModel;

public MainPresenter(MainContact.ILogView view) {

super(view);

mLogModel = new LogModel();

}

@Override

public void login(String name, String pwd) {

if (!TextUtils.isEmpty(name) && !TextUtils.isEmpty(pwd)) {

mLogModel.login(name, pwd, new IModelResultListenet() {

@Override

public void onSuccess(String o) {

getView().success(true);

}

@Override

public void onFailure() {

getView().success(false);

}

});

} else {

}

}

}

public class LogModel implements MainContact.ILogMode {

@Override

public void login(String name, String pwd, IModelResultListenet backListenet) {

if (name.equals(pwd)) {

backListenet.onSuccess(null);

} else {

backListenet.onFailure();

}

}

}

//Model回调

public interface IModelResultListenet {

void onSuccess(T t);

void onFailure();

}

就这样一个MVP就体现出来了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值