gpt4 book ai didi

java - 在 OOP 中添加/注册按钮监听器的样式(Java、Actionscript 等)

转载 作者:行者123 更新时间:2023-11-30 05:16:18 28 4
gpt4 key购买 nike

在 UI 中添加按钮监听器时,我遇到了 2 种不同的样式。我以 SWT 为例。但尽管如此,我在 J2ME、Flash Actionscript 中也看到了类似的代码。

样式1:

    b1.addSelectionListener(new SelectionListener()
{
public void widgetSelected(SelectionEvent e)
{
System.out.println("b1: ");
}

public void widgetDefaultSelected(SelectionEvent e)
{
System.out.println("Default selection");
}
});

b2.addSelectionListener(new SelectionListener()
{
public void widgetSelected(SelectionEvent e)
{
System.out.println("b2: ");
}

public void widgetDefaultSelected(SelectionEvent e)
{
System.out.println("Default selection");
}
});

样式2:

    b1.addSelectionListener(this);
b2.addSelectionListener(this);

public void widgetSelected(SelectionEvent e)
{
if (e.getSource() == b1)
{
System.out.println(b1);
}
else if (e.getSource() == b2)
{
System.out.println(b2);
}

}

public void widgetDefaultSelected(SelectionEvent e)
{
System.out.println("Default selection");
}

我个人更喜欢第二种风格,因为它为我提供了一种集中的方式来处理鼠标事件。您更喜欢哪种风格?为什么?

最佳答案

我通常不喜欢第二种样式,因为它在两个按钮及其容器之间创建了耦合。

如果 B1 和 B2 的功能是独立的,则 B1 不应该知道 B2 的任何信息,反之亦然。通过共享事件处理程序,您不仅进行了浪费的检查,而且还破坏了这种独立性。他们现在分享他们的处理方法。

此外,通过采用选项 2,您现在已经耦合了三个类:B1、B2 和具有处理机制的容器。另一方面,如果您遵循选项 1,则 B1 耦合到其个人处理程序,B2 耦合到其自己的个人处理程序,并且容器不需要了解任何有关处理程序的信息!

事实上,通过遵循选项#2,您向容器赋予了另一个责任 - 它负责事件路由。该工具包已经为您完成了事件路由 - 单击一下,它将调用正确的事件处理程序。使用此选项,您将重新发明轮子。

如果每个按钮的处理足够复杂,那么创建按钮的两个子类并让每个子类安装自己的监听器可能是有意义的。然后,您的容器只需实例化按钮,而不必实际包含用于处理事件的代码(即使作为匿名类)。

请注意,我理解想要集中事件处理的情绪;但这是微观管理。 GUI 编程已经够困难和乏味的了。事件处理是 GUI 编程中最烦人的事情之一。这是您应该感到高兴的第一件事,因为您不必自己安排路线和管理。很少有令人信服的情况可以比工具包更好地管理事情。

关于java - 在 OOP 中添加/注册按钮监听器的样式(Java、Actionscript 等),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1090066/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com