Java 中的服务到工作者模式:增强 UI 和业务逻辑集成
服务到工作者设计模式的意图
Java 中的服务到工作者设计模式结合了调度程序视图和服务定位器模式,以促进 Web 应用中处理、控制流程和视图管理的分离。
服务到工作者模式的详细解释和现实世界示例
现实世界示例
想象一个大型连锁餐厅,它拥有一个中央厨房和多个服务员。当客户下单时,服务员(控制器)接单并将其交给厨房(服务)。然后,厨房处理订单,准备菜肴,并将菜肴交回服务员。最后,服务员将菜肴送达客户(视图)。这种情况反映了使用服务到工作者模式的 Java Web 应用,其中后端逻辑(如厨房)与前端交互(如服务员)分离,提高了设计模式实现中的专注度和效率。
通俗地说
将 Web 应用中的处理逻辑与视图分离,以提高可维护性和可扩展性。
服务到工作者模式在 Java 中的编程示例
服务到工作者设计模式将 Web 应用中的处理逻辑与视图分离,以提高可维护性和可扩展性。它结合了调度程序视图和服务定位器模式,以促进 Web 应用中处理、控制流程和视图管理的分离。
在我们的示例中,我们有一个 GiantController
类,它在服务到工作者模式中充当控制器。它接收命令并更新视图。Dispatcher
类负责执行操作和更新视图。
以下是 GiantController
类
public class GiantController {
public Dispatcher dispatcher;
public GiantController(Dispatcher dispatcher) {
this.dispatcher = dispatcher;
}
public void setCommand(Command s, int index) {
dispatcher.performAction(s, index);
}
public void updateView(GiantModel giantModel) {
dispatcher.updateView(giantModel);
}
}
在 GiantController
类中,我们有一个 setCommand
方法,它接受一个 Command
和一个索引。此方法用于控制调度程序。updateView
方法用于使用提供的 GiantModel
更新视图。
App
类是应用程序的入口点
public class App {
public static void main(String[] args) {
var giant1 = new GiantModel("giant1", Health.HEALTHY, Fatigue.ALERT, Nourishment.SATURATED);
var giant2 = new GiantModel("giant2", Health.DEAD, Fatigue.SLEEPING, Nourishment.STARVING);
var action1 = new Action(giant1);
var action2 = new Action(giant2);
var view = new GiantView();
var dispatcher = new Dispatcher(view);
dispatcher.addAction(action1);
dispatcher.addAction(action2);
var controller = new GiantController(dispatcher);
controller.updateView(giant1);
controller.updateView(giant2);
controller.setCommand(new Command(Fatigue.SLEEPING, Health.HEALTHY, Nourishment.STARVING), 0);
controller.setCommand(new Command(Fatigue.ALERT, Health.HEALTHY, Nourishment.HUNGRY), 1);
controller.updateView(giant1);
controller.updateView(giant2);
}
}
在 main
方法中,我们创建了两个 GiantModel
实例,giant1
和 giant2
,以及两个 Action
实例,action1
和 action2
。然后我们创建一个 GiantView
实例和一个 Dispatcher
实例。我们将 action1
和 action2
添加到 Dispatcher
,并使用 Dispatcher
创建一个 GiantController
。然后我们使用 giant1
和 giant2
更新视图,设置一些命令,并再次更新视图。
控制台输出
12:23:10.895 [main] INFO com.iluwatar.servicetoworker.GiantView -- Giant giant1, The giant looks healthy, alert and saturated.
12:23:10.897 [main] INFO com.iluwatar.servicetoworker.GiantView -- Giant giant2, The giant looks dead, sleeping and starving.
12:23:10.897 [main] INFO com.iluwatar.servicetoworker.GiantView -- Giant giant1, The giant looks healthy, sleeping and starving.
12:23:10.897 [main] INFO com.iluwatar.servicetoworker.GiantView -- Giant giant2, The giant looks healthy, alert and hungry.
这是一个关于如何在 Java 应用程序中实现服务到工作者模式的简单示例。
何时在 Java 中使用服务到工作者模式
- 当您需要将控制器逻辑与视图分离以提高代码可维护性并使团队成员能够独立地处理应用程序的不同部分时,使用此模式。
- 适用于使用 MVC 架构的 Java Web 应用。
- 适用于在显示视图之前需要进行复杂请求处理的场景。
服务到工作者模式在 Java 中的现实世界应用
- 基于 Java 的 Web 框架,如 Struts 和 Spring MVC。
- 需要在展示逻辑和业务逻辑之间进行清晰分离的企业级 Web 应用。
服务到工作者模式的优缺点
优点
- 通过分离关注点来增强代码可维护性。
- 通过解耦控制器和视图组件来促进团队协作。
- 简化了添加新视图和修改现有视图的操作。
权衡
- 增加了应用程序结构的复杂性。
- 由于分层架构,可能会引入额外的开销。
相关的 Java 设计模式
- 模型-视图-控制器 (MVC): 服务到工作者是 MVC 的一种专门形式,专注于分离请求处理和视图管理。
- 前端控制器: 通常与服务到工作者一起使用,以集中请求处理和路由。