- MVC(Model-View-Controller)模式
- MVP(Model-View-Presenter)模式
- MVVM(Model-View-ViewModel)模式
- Singleton(单例)模式
- Factory(工厂)模式
- Observer(观察者)模式
- Strategy(策略)模式
- Adapter(适配器)模式
这些设计模式都有不同的特点和用途,在开发 Android 应用程序时可以根据具体的需求进行选择。
MVP(Model-View-Presenter)模式是一种改进的 MVC 模式,它将控制器(Controller)替换为了 Presenter。Presenter 旨在将模型(Model)和视图(View)分离,并将逻辑放在 Presenter 中。在 MVP 中,视图是被动的,它只负责展示数据和接收用户输入,而 Presenter 则负责响应用户输入、更新数据和控制视图状态。
以下是 MVP 模式的三个组件:
- 模型(Model):模型层表示应用程序的数据和业务逻辑。它可以包括数据结构、数据库操作、API 调用等。在 Android 中,模型通常由 Java 类或者使用 Room 框架的数据库表示。
- 视图(View):视图层表示用户界面。它可以包括布局、控件、样式等。在 Android 中,视图通常由 XML 布局文件表示。
- Presenter:Presenter 是连接模型和视图的中间人。它负责处理用户输入、更新数据和控制视图状态。在 Android 中,Presenter 通常由 Java 类表示。
以下是一个简单的 Android 应用程序,其中使用了 MVP 设计模式。
模型:
public class UserModel {
private String name;
private int age;
public UserModel(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
public void setName(String name) {
this.name = name;
}
public void setAge(int age) {
this.age = age;
}
}
视图:
public interface UserView {
void showUser(UserModel user);
}
Presenter:
public class UserPresenter {
private UserView view;
private UserModel model;
public UserPresenter(UserView view) {
this.view = view;
this.model = new UserModel("Tom", 25);
}
public void updateUser(String name, int age) {
model.setName(name);
model.setAge(age);
view.showUser(model);
}
}
Activity:
public class MainActivity extends AppCompatActivity implements UserView {
private UserPresenter presenter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
presenter = new UserPresenter(this);
}
public void onClickUpdateUser(View view) {
EditText nameEditText = findViewById(R.id.nameEditText);
EditText ageEditText = findViewById(R.id.ageEditText);
String name = nameEditText.getText().toString();
int age = Integer.parseInt(ageEditText.getText().toString());
presenter.updateUser(name, age);
}
@Override
public void showUser(UserModel user) {
TextView nameTextView = findViewById(R.id.nameTextView);
TextView ageTextView = findViewById(R.id.ageTextView);
nameTextView.setText(user.getName());
ageTextView.setText(String.valueOf(user.getAge()));
}
}
在上面的示例代码中,Presenter 对用户输入进行处理,并根据用户输入更新数据。当数据发生更改时,Presenter 调用视图的 showUser 方法,以更新界面。因此,模型和视图之间是相互独立的,Presenter 负责它们之间的通信和控制。
在实际开发中,Presenter 还可以实现一些其他的功能,比如:
- 从服务器获取数据,并将数据更新到视图上。
- 处理用户操作,比如点击事件和长按事件。
- 处理应用程序的生命周期事件,比如 onCreate、onStart、onResume 等。
MVP 模式的优点如下:
- 它可以使代码更加清晰和易于维护。
- 它可以降低模块之间的耦合度,使得修改一个模块时不会影响其他模块。
- 它可以使测试更加容易,因为每个组件都是相互独立的。
但是,MVP 模式也有一些缺点:
- 它需要编写更多的代码,因为需要编写 Presenter 类来处理逻辑。
- 它需要更多的时间和精力来设计和实现,因为需要考虑如何分离视图、模型和 Presenter。
总之,MVP 模式是一种非常有用的设计模式,它可以使代码更加清晰和易于维护,特别是在开发大型 Android 应用程序时。