Java 中的模型-视图-控制器模式:简化 Java Web 开发
约 2 分钟
也称为
- MVC
模型-视图-控制器设计模式的意图
将应用程序分离为三个相互关联的组件(模型、视图、控制器),从而能够独立地模块化开发每个部分,增强可维护性和可扩展性。模型-视图-控制器 (MVC) 设计模式广泛应用于 Java 应用程序中,用于 Web 开发和用户界面分离。
模型-视图-控制器模式的详细解释及现实世界示例
现实世界示例
考虑医院中 ICU 房间的显示设备,该设备显示患者健康信息并接收来自传感器的输入。显示屏显示从控制器接收的数据,控制器从传感器模型中更新数据。这在现实世界的 Java 应用程序中体现了 MVC 设计模式。
用通俗的语言来说
MVC 通过在模型和视图之间协调控制器来分离业务逻辑和用户界面。
维基百科说
模型-视图-控制器 (MVC) 通常用于开发用户界面,将相关的程序逻辑划分为三个相互关联的元素。这样做是为了将信息的内部表示与信息呈现给用户和接受用户输入的方式分开。
Java 中模型-视图-控制器模式的编程示例
考虑以下提供健康、疲劳和营养信息的 GiantModel
模型类。
@Getter
@Setter
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class GiantModel {
private Health health;
private Fatigue fatigue;
private Nourishment nourishment;
@Override
public String toString() {
return String.format("The giant looks %s, %s and %s.", health, fatigue, nourishment);
}
}
GiantView
类用于显示接收到的患者数据。
public class GiantView {
public void displayGiant(GiantModel giant) {
LOGGER.info(giant.toString());
}
}
GiantController
类接收 GiantModel
中的更新并将其发送到 GiantView
以显示。
public class GiantController {
private final GiantModel giant;
private final GiantView view;
public GiantController(GiantModel giant, GiantView view) {
this.giant = giant;
this.view = view;
}
@SuppressWarnings("UnusedReturnValue")
public Health getHealth() {
return giant.getHealth();
}
public void setHealth(Health health) {
this.giant.setHealth(health);
}
@SuppressWarnings("UnusedReturnValue")
public Fatigue getFatigue() {
return giant.getFatigue();
}
public void setFatigue(Fatigue fatigue) {
this.giant.setFatigue(fatigue);
}
@SuppressWarnings("UnusedReturnValue")
public Nourishment getNourishment() {
return giant.getNourishment();
}
public void setNourishment(Nourishment nourishment) {
this.giant.setNourishment(nourishment);
}
public void updateView() {
this.view.displayGiant(giant);
}
}
此示例演示了 MVC 模式如何在 Java 应用程序中分离关注点,从而更轻松地独立管理和更新组件。
何时在 Java 中使用模型-视图-控制器模式
- 用于 Web 应用程序,用于分离数据模型、用户界面和用户输入处理。
- 适用于需要清晰分离关注点的应用程序,确保业务逻辑、用户界面和用户输入松散耦合并独立管理,遵循 MVC 模式。
模型-视图-控制器模式 Java 教程
Java 中模型-视图-控制器模式的现实世界应用
- Java 中用于 Web 应用程序的 Spring MVC 等框架。
- Java 中的桌面应用程序,例如使用 Swing 或 JavaFX 的应用程序。
模型-视图-控制器模式的优缺点
优点
- 通过分离关注点,促进了代码结构的组织。
- 便于并行开发组件。
- 由于解耦性质,增强了可测试性。
- 更易于管理和更新各个部分,而不会影响其他部分。
权衡
- 最初设置架构的复杂性增加。
- 如果实现不正确或用于非常小的项目,可能会导致过多的样板代码。
相关的 Java 设计模式
- 观察者:通常用于 MVC 中,视图观察模型的变化;这是当模型状态发生变化时更新 UI 的基本关系。
- 策略:控制器可以使用不同的策略来处理用户输入,这些策略通过在 Java MVC 应用程序中切换用户输入处理策略的能力相关联。
- 组合:可以使用组合模式来构建视图,以管理用户界面组件的层次结构。