Android MVVM 架构简介及示例
引言
在 Android 应用开发中,设计模式的选择对应用的可维护性和可扩展性至关重要。从众多设计模式中,MVVM(Model-View-ViewModel)因其将 UI 逻辑与业务逻辑分离的特性而受到广泛关注。在本篇文章中,我们将探索 MVVM 架构,并通过示例代码加深理解。
MVVM 架构概述
MVVM 架构的组成部分如下:
- Model:负责应用的业务逻辑和数据,这部分与 UI 无关。
- View:负责显示界面,用户与 UI 的交互由此触发 ViewModel 的方法。
- ViewModel:连接 Model 和 View,负责处理 UI 的逻辑和每个 View 的状态。
这种架构的优势在于数据的双向绑定,可以让 View 和 ViewModel 在数据更新时自动同步。
类图
以下是 MVVM 架构的类图,以便于理解各部分之间的关系:
classDiagram
class Model {
+getData() : List<String>
}
class ViewModel {
+fetchData() : void
+getData() : LiveData<List<String>>
}
class View {
+displayData(data: List<String>) : void
}
Model <--> ViewModel
View <--> ViewModel
示例代码
接下来,我们通过一个简单的示例来展示 MVVM 架构的实现。在这个示例中,我们将创建一个应用来展示一个简单的字符串列表。
1. Model
首先,我们定义 Model 层,将其命名为 DataModel
:
public class DataModel {
private List<String> data;
public DataModel() {
data = new ArrayList<>();
data.add("Item 1");
data.add("Item 2");
data.add("Item 3");
}
public List<String> getData() {
return data;
}
}
2. ViewModel
接下来是 ViewModel 层,我们命名为 MainViewModel
:
import androidx.lifecycle.LiveData;
import androidx.lifecycle.MutableLiveData;
import androidx.lifecycle.ViewModel;
public class MainViewModel extends ViewModel {
private final DataModel dataModel;
private final MutableLiveData<List<String>> dataList;
public MainViewModel() {
dataModel = new DataModel();
dataList = new MutableLiveData<>();
fetchData();
}
public void fetchData() {
dataList.setValue(dataModel.getData());
}
public LiveData<List<String>> getData() {
return dataList;
}
}
3. View
最后是 View 层,通常为 Activity 或 Fragment,这里我们用 MainActivity
为例:
import android.os.Bundle;
import androidx.appcompat.app.AppCompatActivity;
import androidx.lifecycle.Observer;
import androidx.lifecycle.ViewModelProvider;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import java.util.List;
public class MainActivity extends AppCompatActivity {
private MainViewModel viewModel;
private ListView listView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listView = findViewById(R.id.listView);
viewModel = new ViewModelProvider(this).get(MainViewModel.class);
viewModel.getData().observe(this, new Observer<List<String>>() {
@Override
public void onChanged(List<String> data) {
ArrayAdapter<String> adapter = new ArrayAdapter<>(MainActivity.this, android.R.layout.simple_list_item_1, data);
listView.setAdapter(adapter);
}
});
}
}
在这个简单的示例中,MainActivity
通过 ViewModel
观察数据更改,当数据发生变化时,ListView 会自动更新。
状态图
行为状态图可以帮助我们理解 MVVM 中 ViewModel 的状态机。以下是一个表示 ViewModel 状态的状态图:
stateDiagram
[*] --> InitialState
InitialState --> Fetching
Fetching --> DataFetched
DataFetched --> [*]
结论
MVVM 架构通过分离关注点,将 UI 和业务逻辑解耦,提高了应用的可维护性及可扩展性。通过本文的示例,相信你已经掌握了 MVVM 的基本概念及在 Android 中的应用。无论你是刚接触 Android 开发的新手,还是经验丰富的开发者,MVVM 模式都能帮助你构建更高效的应用程序。希望这篇文章能够对你的学习旅程有所帮助!