设计模块化事件处理系统对于创建可维护且可扩展的JavaFX应用程序至关重要. Intervider模式提供了一个有效的解析组件并简化它们之间的通信方式. 本条探索如何使用JavaFX中的Intervider模式实施模块化事件处理系统.

理解调解人模式

介导模式是一种行为设计模式,通过确保组件通过中央介导而不是直接相互沟通来推动松散的耦合. 在JavaFX中,这种模式有助于管理UI组件之间的复杂互动,使代码更容易维护和扩展.

设计调解人接口

开始定义一个宣布组件注册和事件处理方法的介面。 此介面是介面行为的合同 。

public interface EventMediator {
 void registerComponent(String name, UIComponent component);
 void handleEvent(String eventType, String sourceComponent);
}

执行调解人

具体调解人管理已登记的组件,并协调事件处理,并维持一个组件地图,确定如何应对各种事件。

public class ConcreteEventMediator implements EventMediator {
 private Map<String, UIComponent> components = new HashMap<>();

 @Override
 public void registerComponent(String name, UIComponent component) {
 components.put(name, component);
 }

 @Override
 public void handleEvent(String eventType, String sourceComponent) {
 // Example: handle button click
 if ("buttonClick".equals(eventType)) {
 UIComponent component = components.get(sourceComponent);
 // Perform actions based on the source component
 System.out.println(sourceComponent + " triggered a " + eventType);
 }
 }
}

创建 UI 组件

按钮或滑动器等UI组件应该与调解人沟通,而不是直接沟通。每个组件在事件发生时通知调解人。

public interface UIComponent {
 void setMediator(EventMediator mediator);
 void triggerEvent(String eventType);
}

public class ButtonComponent implements UIComponent {
 private EventMediator mediator;
 private String name;

 public ButtonComponent(String name) {
 this.name = name;
 }

 @Override
 public void setMediator(EventMediator mediator) {
 this.mediator = mediator;
 }

 @Override
 public void triggerEvent(String eventType) {
 mediator.handleEvent(eventType, name);
 }
}

JavaFX 集成组件和调解员

在您的 JavaFX 应用程序中, 立即启动 调解员和组件, 向 调解员 注册 组件, 并设置事件处理器以触发 调解员 通知 。

public class MainApp extends Application {
 @Override
 public void start(Stage primaryStage) {
 ConcreteEventMediator mediator = new ConcreteEventMediator();

 ButtonComponent button1 = new ButtonComponent("Button1");
 ButtonComponent button2 = new ButtonComponent("Button2");

 button1.setMediator(mediator);
 button2.setMediator(mediator);

 mediator.registerComponent("Button1", button1);
 mediator.registerComponent("Button2", button2);

 Button javafxButton1 = new Button("Button 1");
 javafxButton1.setOnAction(e -> button1.triggerEvent("buttonClick"));

 Button javafxButton2 = new Button("Button 2");
 javafxButton2.setOnAction(e -> button2.triggerEvent("buttonClick"));

 VBox vbox = new VBox(10, javafxButton1, javafxButton2);
 Scene scene = new Scene(vbox, 300, 200);
 primaryStage.setScene(scene);
 primaryStage.setTitle("Mediator Pattern in JavaFX");
 primaryStage.show();
 }

 public static void main(String[] args) {
 launch(args);
 }
}

通过遵循这种方法,您创建了一个模块化,可扩展的事件处理系统,利用介导模式简化JavaFX应用程序中的组件交互.