抽象方法与监听器

时间:2015-10-31 08:13:27

标签: java

我正在创建一个按钮类,它自己处理输入和绘图;唯一需要定义的是位置以及按下按钮时会发生什么。

在这种情况下,拥有ButtonPressListener界面并将其作为Button构造函数中的参数更好,或者Button是否应该是抽象的抽象方法pressed()

Button生成的启动代码如下所示:

new Button(x,y,new ButtonPressListener(){
    @Override
    protected void pressed(){
        // code
    }
});

new Button(x,y){
    @Override
    protected void pressed(){
        // code
    }
};

此外,在其他类似的情况下,在两种方法之间进行选择时应该考虑什么?

感谢。

2 个答案:

答案 0 :(得分:3)

我更喜欢听众。

Resons:

  • 使用java8 lambdas时,监听器将为您提供更多灵活性。
  • 您可以编写一个可以监听多个按钮的课程
  • 您可以编写一个侦听按钮并继承其他类
  • 的类

顺便说一句:您应该考虑使用setter,而不是构造函数的参数。这将允许创建没有监听器的按钮 - 或者定义多个监听器。另外参数有点难以读取然后设置,因为参数在java中没有名称。

答案 1 :(得分:1)

如果您正在尝试从这个项目中学习,您可以同时做两件事,并找出哪些更适合您。 Wenn你发现了,重构并抛弃了不太喜欢的选项。

创建Button.pressed()的默认实现,如果设置,则调用侦听器实现的功能。提供两个构造函数,一个用于设置监听器,另一个用于设置监听器。

当然,这不是一个选项,其他人应使用此API。