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张图片

1.Model层

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

Model层所要执行的业务逻辑

/**

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

*/

public interface LoginModel {

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

void login(User user, OnLoginFinishedList

Android 架构MVC MVP MVVM+实例,爆火的Android面试题_第2张图片

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面试题_第3张图片

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面试题_第4张图片

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

Android 架构MVC MVP MVVM+实例,爆火的Android面试题_第5张图片

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

this.password = password;

//刷新UI

notifyPropertyChanged(BR.password);

}

public User(String name, String password) {

this.name = name;

this.password = password;

最后

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

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

[外链图片转存中…(img-7o3b6zdT-1647754367151)]

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

[外链图片转存中…(img-9sRSZSkk-1647754367151)]

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

你可能感兴趣的:(程序员,经验分享,面试,开发语言)