什么时候使用内部类而不是解耦设计?

时间:2014-10-22 19:05:39

标签: java swing design-patterns

我经常看到人们为听众写内部课程,例如。

   button.addActionListener(new ActionListener() {     
        public void actionPerformed(ActionEvent e) {
            //some action
        }
    });

在我的大学,我们非常重视使用MCV或MVP等设计模式解耦设计。

我什么时候想要以分离的方式使用内部类?

我唯一的猜测是物体不需要互动? (或懒惰??)

(学生)

2 个答案:

答案 0 :(得分:1)

这实际上被称为匿名内部类。如果您只需要使用一次类,就可以使用它。

它还会减少代码的大小,除非它当然覆盖了许多功能(我个人更喜欢匿名类的大小以便于阅读)。

答案 1 :(得分:0)

这种匿名内部类称为参数定义的内部类,并作为方法调用的一部分自动实例化。

这里在方法参数中,我们得到一个类的对象,它是ActionListener接口的子类,但是新创建的类没有任何名称(匿名),所以我们不能在控件通过后再次创建它的对象这句话。

  1. 现在在实现ActionPerformed Interface的匿名内部类中,我们覆盖了actionPerformed()方法,该方法非常特定于该按钮,然后new关键字创建了这个匿名类的对象,它将自动作为参数传递。

  2. 或者您也可以创建一个新类(比如myListener),它扩展ActionListener类并覆盖其actionPerformed()方法。然后创建myListener的新对象并将其作为参数传递给addActionListener()方法。

  3. 如果你使用metohod 2.你可以看到你是否有10个按钮,每个按钮必须执行不同的任务,那么你必须创建10个ActionPerformed实现者类和 将对象传递给这些实现者类的addActionListener()方法。     使用这种方法为单个对象创建一个全新的类是完全愚蠢的。

    这就是为什么大多数Listener作为匿名内部类的对象传递的原因。