【问题标题】:Observer Pattern confusion观察者模式混淆
【发布时间】:2011-11-04 19:13:46
【问题描述】:

如果我有一个构建我的第一个界面的 GUI 构建器,并且我附加了一个观察者来检测该界面中的某个字段何时更新,那么我是否必须执行以下操作之一;

1) 从 builder 创建 interface1,然后附加一个观察者,以便 builder 可以知道某个任务何时完成 2)我是否只是创建一个观察者,然后观察者创建接口?

基本上我正在尝试从构建器创建一个界面,然后单击按钮即可获取一些数据。检索到此数据后,我想让构建器类知道,以便它可以继续使用它来构建接口 2。我正在尝试使用观察者设计模式来执行此操作。

谢谢

【问题讨论】:

    标签: java oop swing events


    【解决方案1】:

    您应该创建接口,然后添加(或注册/附加)相关的观察者。类似的东西(在伪代码中);

    GUI mygui = GUIBuilder.createNewGUI();
    
    ButtonListener OK = new OKButtonListener();
    ButtonListener Cancel = new CancelButtonListener();
    DataListener dataReady = new dataReadyListener();
    
    mygui.registerButtonListener(OK);
    mygui.registerButtonListener(Cancel);
    mygui.registerDataListener(dataReady);
    
    mygui.show();
    

    如果您正在构建的所有 GUI 都将附加相同的侦听器,您可以让界面构建器也为您创建和附加侦听器。

    【讨论】:

    • 很抱歉这里缺乏理解,但这一切都是在构建器类中进行的。我只是担心在构建器类中有听众会破坏责任驱动的设计
    • XXXListener 类是观察者。 mygui 是可观察的。
    • 所以我们为每个要监控的控件都有一个观察者类?
    • 您不一定需要每个控件的观察者。例如,您可以有一个 ControlButtonListener 类来处理多种类型的按钮按下。在这种情况下,您的侦听器接口需要获取一些从可观察对象(GUI)传入的数据,以便知道如何继续。一个简单的例子是将按钮文本的字符串值作为数据传递给观察者——观察者可以有一个 switch 语句检查哪个按钮被按下(通过查看字符串值),并采取相应的行动。
    • 另外,你有一个有效的观点。对于最灵活的方法,您的构建器不应自行创建侦听器。它可以具有接收侦听器并根据需要注册它们的方法...因此您可以在构建器上拥有 AddButtonListener() 和 AddDataListener(),它将封装上述步骤以将它们注册到您的适当部分图形用户界面。根据您正在构建的应用程序的具体情况,您可以采用这种方式还是按照上面的方式进行设计。
    猜你喜欢
    • 2016-02-20
    • 2023-04-10
    • 1970-01-01
    • 2021-06-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多