0
点赞
收藏
分享

微信扫一扫

Android 架构MVC MVP MVVM 实例,爆火的Android面试题

//set?or?get?...

public?User(String?name,?String?password)?{

this.name?=?name;

this.password?=?password;

}

}

3.MVCLoginActivity

//用户点击事件

mvcBinding.mcvLogin.btnLogin.setOnClickListener(new?View.OnClickListener()?{

@Override

public?void?onClick(View?v)?{

user.setName(mvcBinding.mcvLogin.etAccount.getText().toString());

user.setPassword(mvcBinding.mcvLogin.etPassword.getText().toString());

login(user);

}

});

//逻辑处理

private?void?login(User?user){

if(!user.getName().isEmpty()&&!user.getPassword().isEmpty()){

if(user.getName().equals("scc001")&&user.getPassword().equals("111111"))

{

Toast.makeText(this,"登录成功",Toast.LENGTH_SHORT).show();

}else{

Toast.makeText(this,"登录失败",Toast.LENGTH_SHORT).show();

}

}else?{

Toast.makeText(this,"登录失败",Toast.LENGTH_SHORT).show();

}

}

MVP实例

代码结构

Android 架构MVC MVP MVVM 实例,爆火的Android面试题

1.Model层

实体类bean,同MVC中的User类,就不贴代码浪费大家时间了。

Model层所要执行的业务逻辑

/**

*?功能:接口,表示Model层所要执行的业务逻辑

*/

public?interface?LoginModel?{

//User实体类;OnLoginFinishedListener?presenter业务逻辑的返回结果

void?login(User?user,?OnLoginFinishedList

Android 架构MVC MVP MVVM 实例,爆火的Android面试题

ener?listener);

}

实现类(实现LoginModel接口)

/**

*?功能:实现Model层逻辑

*/

public?class?LoginModelImpl?implements?LoginModel?{

//第4步:验证帐号密码

@Override

public?void?login(User?user,?OnLoginFinishedListener?listener)?{

if(user.getName().isEmpty()||!user.getName().equals("scc001")){

//第5步:Model层里面回调Presenter层listener

listener.onUserNameError();

}else?if(user.getPassword().isEmpty()||!user.getPassword().equals("111111")){

//第5步:Model层里面回调Presenter层listener

listener.onPasswordError();

}else?{

//第5步:Model层里面回调Presenter层listener

listener.onSuccess();

}

}

}

2.Presenter层

当Model层得到请求的结果,回调Presenter层,让Presenter层调用View层的接口方法。

/**

*?功能:当Model层得到请求的结果,回调Presenter层,让Presenter层调用View层的接口方法。

*/

public?interface?OnLoginFinishedListener?{

void?onUserNameError();

void?onPasswordError();

void?onSuccess();

}

完成登录的验证,以及销毁当前View。

/**

*?功能:登录的Presenter的接口,实现类为LoginPresenterImpl,

*?完成登录的验证,以及销毁当前View。

*/

public?interface?LoginPresenter?{

//完成登录的验证

void?verifyData(User?user);

//销毁当前View

void?onDestroy();

}

Presenter实现类,引入 LoginModel(model)和LoginView(view)的引用

/**

*?功能:实现类,引入?LoginModel(model)和LoginView(view)的引用

*/

public?class?LoginPresenterImpl?implements?OnLoginFinishedListener,?LoginPresenter?{

//View层接口

private?LoginView?loginView;

//Model层接口

private?LoginModel?loginModel;

public?LoginPresenterImpl(LoginView?loginView)?{

this.loginView?=?loginView;

this.loginModel?=?new?LoginModelImpl();

}

//第6步:通过OnLoginFinishedListener验证结果回传到Presenter层

@Override

public?void?onUserNameError()?{

if?(loginView?!=?null)?{

//第7步:通过loginView回传到View层

loginView.setUserNameError();

loginView.hideProgress();

}

}

//第6步:通过OnLoginFinishedListener验证结果回传到Presenter层

@Override

public?void?onPasswordError()?{

if?(loginView?!=?null)?{

//第7步:通过loginView回传到View层

loginView.setPasswordError();

loginView.hideProgress();

}

}

//第6步:通过OnLoginFinishedListener验证结果回传到Presenter层

@Override

public?void?onSuccess()?{

if?(loginView?!=?null)?{

//第7步:通过loginView回传到View层

loginView.success();

loginView.hideProgress();

}

}

@Override

public?void?verifyData(User?user)?{

if?(loginView?!=?null)?{

loginView.showProgress();

}

//第3步:调用model层LoginModel接口的login()方法

loginModel.login(user,this);

}

@Override

public?void?onDestroy()?{

loginView?=?null;

}

}

3.View层

布局文件同MVC中的View层,就不贴代码浪费大家时间了。

Presenter与View交互是通过接口。

/**

*?功能:Presenter与View交互是通过接口。

*?接口中方法的定义是根据Activity用户交互需要展示的控件确定的。

*/

public?interface?LoginView?{

//login是个耗时操作,加载中(一般用ProgressBar)

void?showProgress();

//加载完成

void?hideProgress();

//login账号失败给出提示

void?setUserNameError();

//login密码失败给出提示

void?setPasswordError();

//login成功

void?success();

}

MVPLoginActivity

/**

*?功能:需要实现LoginView接口。

*/

public?class?MVPLoginActivity?extends?AppCompatActivity?implements?LoginView?{

LoginPresenterImpl?loginPresenterImpl;

@Override

protected?void?onCreate(@Nullable?Bundle?savedInstanceState)?{

...

//创建一个Presenter对象

loginPresenterImpl?=?new?LoginPresenterImpl(MVPLoginActivity.this);

//第1步:用户点击登录

mvpBinding.mvpLogin.btnLogin.setOnClickListener(new?View.OnClickListener()?{

@Override

public?void?onClick(View?v)?{

User?user?=?new?User();

user.setName(mvpBinding.mvpLogin.etAccount.getText().toString());

user.setPassword(mvpBinding.mvpLogin.etPassword.getText().toString());

//第2步:调用Presenter接口中的验证方法

loginPresenterImpl.verifyData(user);

}

});

}

@Override

public?void?showProgress()?{

//加载中

}

@Override

public?void?hideProgress()?{

//加载完成

}

@Override

public?void?setUserNameError()?{

//第7步:通过loginView回传到View层

//账号错误

Toast.makeText(this,"登录失败",Toast.LENGTH_SHORT).show();

}

@Override

public?void?setPasswordError()?{

//第7步:通过loginView回传到View层

//密码错误

Toast.makeText(this,"登录失败",Toast.LENGTH_SHORT).show();

}

@Override

public?void?success()?{

//第7步:通过loginView回传到View层

Toast.makeText(this,"登录成功",Toast.LENGTH_SHORT).show();

//登录成功

}

@Override

protected?void?onDestroy()?{

super.onDestroy();

loginPresenterImpl.onDestroy();

}

}

MVVM实例

Android 架构MVC MVP MVVM 实例,爆火的Android面试题

1.Model层

实体类bean,继承BaseObservable

public?class?User?extends?BaseObservable{

private?String?name;

private?String?password;

public?User()?{

}

//BR?的域则是通过在?get?方法上加?@Bindable?生成的

@Bindable

public?String?getName()?{

return?name;

}

public?void?setName(String?name)?{

this.name?=?name;

//刷新UI

//BR?的域则是通过在?get?方法上加?@Bindable?生成的

notifyPropertyChanged(BR.name);

}

@Bindable

public?String?getPassword()?{

return?password;

}

public?void?setPassword(String?password)?{

this.password?=?password;

//刷新UI

notifyPropertyChanged(BR.password);

}

public?User(String?name,?String?password)?{

this.name?=?name;

this.password?=?password;

最后

希望本文对你有所启发,有任何面试上的建议也欢迎留言分享给大家。

好了,今天的分享就到这里,如果你对在面试中遇到的问题,或者刚毕业及工作几年迷茫不知道该如何准备面试并突破现状提升自己,对于自己的未来还不够了解不知道给如何规划,来看看同行们都是如何突破现状,怎么学习的,来吸收他们的面试以及工作经验完善自己的之后的面试计划及职业规划。

Android 架构MVC MVP MVVM 实例,爆火的Android面试题

好了~如果你看到了这里,觉得文章写得不错就给个赞呗?如果你觉得那里值得改进的,请给我留言。一定会认真查询,修正不足。谢谢。

Android 架构MVC MVP MVVM 实例,爆火的Android面试题

为什么某些人会一直比你优秀,是因为他本身就很优秀还一直在持续努力变得更优秀,而你是不是还在满足于现状内心在窃喜!希望读到这的您能点个小赞和关注下我,以后还会更新技术干货,谢谢您的支持!

举报

相关推荐

0 条评论