Android 设计模式之MVC模式

本文深入解析MVC(Model-View-Controller)架构原理,通过一个登录系统的实例演示了MVC如何分离数据处理、界面展示与业务逻辑,帮助读者理解并掌握MVC的设计模式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

MVC的介绍

MVC是Model-View-Controller的简称

Model:模型层,负责处理数据的加载或者存储

View:视图层,负责界面数据的展示,与用户进行交互

Controller:控制器层,负责逻辑业务的处理

 

下面以登录写个简单的demo。

整体的项目架构。

1.xml布局。

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

xmlns:app="http://schemas.android.com/apk/res-auto"

xmlns:tools="http://schemas.android.com/tools"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:orientation="vertical"

tools:context="com.example.zb.mymvcdemo.MainActivity">

 

<Button

android:id="@+id/bt_on"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="登录"

app:layout_constraintBottom_toBottomOf="parent"

app:layout_constraintLeft_toLeftOf="parent"

app:layout_constraintRight_toRightOf="parent"

app:layout_constraintTop_toTopOf="parent" />

 

<TextView

android:id="@+id/tv_content"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:text="内容"

/>

 

</LinearLayout>

 

2.数据操作回调接口,model和view之间的联系。

public interface LoginListener {

void onBefore();

 

void onSuccess(String str);

 

void onFailed();

}

 

3.Controller和model之间的联系。

public interface LoginModel {

/**

* (获取登录数据)

* Created by zb on 2019/4/25.

*/

void login(String admin, String pas,String url, LoginListener loginListener);

 

}

 

 

4.逻辑处理LoginModelImp进行网络请求

 

/**用户操作具体实现类

* Created by zb on 2019/4/25.

*/

 

public class LoginModelImp implements LoginModel{

@Override

public void login(String admin, String pas, String url, final LoginListener loginListener) {

 

if (loginListener == null) return;

loginListener.onBefore();

 

HashMap<String, String> param=new HashMap<>();

param.put("code",admin);

param.put("password",pas);

HttpUtils.doPost(url, param, new Callback() {

@Override

public void onFailure(Call call, IOException e) {

 

loginListener.onFailed();

}

@Override

public void onResponse(Call call, Response response) throws IOException {

loginListener.onSuccess(response.body().string());

}

});

}

}

请求成功我们就通过LoginListener 告诉view可以开始展示了。

 

 

5.MainActivity

public class MainActivity extends AppCompatActivity implements LoginListener{

 

@BindView(R.id.bt_on)

Button mBtOn;

@BindView(R.id.tv_content)

TextView mTvContent;

LoginModelImp loginModelImp;

 

@Override

protected void onCreate(Bundle savedInstanceState){

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

ButterKnife.bind(this);

}

@OnClick(R.id.bt_on)

public void onViewClicked() {

if (loginModelImp == null) {

loginModelImp = new LoginModelImp();

}

String url="http://192.168.200.211:8081/GetUserInfo";

loginModelImp.login("admin","123456",url,MainActivity.this);

 

}

private ProgressDialog dialog;

@Override

public void onBefore() {

if (dialog == null) {

dialog = new ProgressDialog(this);

}

dialog.show();

}

 

@Override

public void onSuccess(final String str) {

this.runOnUiThread(new Runnable() {

@Override

public void run() {

mTvContent.setText(str);

dialog.dismiss();

}

});

}

 

@Override

public void onFailed() {

dialog.dismiss();

}

}

 

以上大功告成。

github地址:

https://github.com/b888zhang/MyMVCDemo

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值